lua メモ
lua の初学者が覚えたことをメモしていきます
for 文の idx, val は for 内での local 変数になる
$ cat tst001.lua
function test()
local ar = {1,2,3,4,5}
local idx = 200
local val
for idx, val in pairs(ar) do
print(idx)
end
print(idx, val)
end
test()
print(idx)
$ lua tst001.lua
1
2
3
4
5
200 nil
nil
: および . の前後は 改行 空白 を挟んでも可
これによって method call の戻り値の object から さらに method call を改行ありでできる
$ cat test.lua
Cls = {
new = function ()
local obj = {}
for key, fnc in pairs(Cls) do
if key ~= "new" then
obj[key] = fnc
end
end
return obj
end,
method1 = function (slf)
print("method1")
return slf
end,
method2 = function (slf)
print("method2")
return slf
end,
}
Cls.new()
:method1()
:method2()
$ lua test.lua
method1
method2
可変長引数の個数
$ cat tst001.lua
function a001(...)
local prm = {...}
print (#prm)
end
a001("aaa", "bbb", "ccc")
a001("aaa", "bbb", "ccc", "ddd")
a001("aaa", "bbb", "ccc", nil, "eee") -- 間に nil があってもよさそう
a001("aaa", nil, "ccc", nil, "eee", "fff")
a001("aaa", nil, "ccc", nil, "eee", "fff", nil) -- 最後が nil だとカウントされない
$ lua tst002.lua
3
4
5
6
6
うまくすれば method overload ぽいこともできそうだけど, いまどきはあんまり method overload やらないのかな .. ???
ボクは 段階的リファクタリングの過程で method overload 使ったりします
return 変数列挙 の function を return 文で call して, 変数列挙ごと受継ぐことは可
$ cat tst.lua
function a()
local x, y = 1, 2
return x, y
end
function b()
return a()
end
local c1, c2 = b()
print(c1, c2)
$ lua tst.lua
1 2