Luaで良く作る関数 ~string編~

python型の文字列拡張書式指定。

  • pyformat.lua として保存
    -- グローバルで文字列に対して「%」演算出来るようにする。
    getmetatable('').__mod = function(s, tab)
    	return (
    		s:gsub(
    			'%%%((%a%w*)%)([-0-9%.]*[cdeEfgGiouxXsq])',
    			function(k, fmt) return tab[k] and ("%"..fmt):format(tab[k]) or '%('..k..')'..fmt end
    		)
    	)
    end
    
  • 使い方
    test.lua
    require "pyformat"
    
    local tbl = {key = "my variable", val = 56.2795}
    print( "%(key)s is %(val)2.2f%" %  tbl )
    --> "my variable is 56.28%"
    

文字列のスライシング。

  • strslice.lua として保存
    -- 文字列のインデックス、及び、スライス。
    getmetatable('').__call = function(str,i,j)
    	if j==nil then return string.sub(str,i,i) end
    
    	if type(i)~='table' then
    		return string.sub(str,i,j)
    	else
    		local t={}
    		for k,v in ipairs(i) do
    			t[k]=string.sub(str,v,v)
    		end
    		return table.concat(t)
    	end
    end
    
    
  • 使い方
    test.lua
    require "strslice"
    
    local s = "abcdefg"
    print(s(3))       --> c
    print(s(3, 3))    --> c
    print(s(2, 5))    --> bcde
    print(s(3, -1))   --> cdefg
    print(s(1, -2))   --> abcdef
    print(("abc")(3)) --> c
    

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-08-16 (土) 20:32:18 (1429d)