🐈

Luaで詰まったこと

2024/05/26に公開

随時更新

文字列

print([[Hello
World!
こんにちは世界
]])

ifをpass

Pythonとかでいうpassがluaにはない。

空っぽにしても大丈夫。

Lua
if() then

end

それが気持ち悪い場合はdo endを置いとくのでも良い。

Lua
if () then
    do
    end
end

Lua5.2とかならセミコロンが使える

Lua5.2
if() then
    ;
end

https://stackoverflow.com/questions/19927055/is-there-a-pass-statement-in-lua-like-in-python

for周り

変動する変数を上限にするならwhileを使え

C++のfor気分でループ上限に変数を使いたかった

c++
for(int i = 0; i < limit; i++){
    fufaufaufaufaufa
}

limitの部分の数値がループ中に変化する場合はLuaではうまくいかなかった。最初の数値が採用されてしまう?

Lua
for i = 1, limit do
    fufaufaufaufaufaend

forではなく、whileを使えば解決

Lua
while i < limit do
    fufaufaufaufaufa
end

functionの中にfunction

以下みたいなことができる。

lcoal fucntioin a()
    local fucntion b()
    end
end

functionの呼び出し順

https://qiita.com/MOKYN/items/ba0bd05f3599234cd40c

directory , file , filepathを扱いたい

モジュールを作りたい、モジュールとしてファイルに分割したい

require()

下記のようなpathからの相対pathでluaのファイルまで辿り着ければ良さそう。
local json = require("00_folder/dkjson")

. :の挙動

http://ahpg.blog.shinobi.jp/lua/lua .-ドット-による関数呼び出しと--コロン-

sort

table.sort(table, sortfunc)みたいな感じでsortできるが、
複数条件でのsortの仕方は以下のようにやる
以下だったら基本はcolorでsortしたくて、colorが一緒の時は名前順にするみたいな処理をしたい時、は
if()で分けてあげると良い。

local function nameSortFuncColor_and_name( a, b )
    if(a.clip_color == b.clip_color)then
        return a.file_name:lower() < b.file_name:lower()
    else
        return a.clip_color:lower() < b.clip_color:lower()
    end
end

table.sort(mytable, nameSortFuncColor_and_name)

Cと連携

https://densan-labs.net/tech/lua/chapter6.html#id1

error

attempt to perform arithmetic on local 'variable_a' (a nil value)

https://qiita.com/uokagi/items/501c67fd2a19dc3f78cf

Discussion