【Defold】Lua スクリプトの書式について

DEVELOP

Defold はLua を採用していてスクリプトの書き方が少し特殊。よく使う書き方をまとめておきます。

構文

コメント

-- 1行コメント

--[[

 複数行コメント
--]]

変数宣言

a = 10
b = 20; c = 30
foo, bar = 40, 50

nil

-- 宣言しなければインスタンスが存在しないためnilになります。
print(my_var)

if my_var then
    print("my_var is not nil nor false!")
end
if not my_var then
    print("my_var is either nil or false!")
end

この場合if not my_var then が出力されます。

boolean

flag = true
if flag then
    print("flag is true")
else
    print("flag is false")
end

flag is true が出力されます。

数値

print(10) --> prints '10'
print(10.0) --> '10'
print(10.000000000001) --> '10.000000000001'

a = 5 -- integer
b = 7/3 -- float
print(a - b) --> '2.6666666666667'

文字列

エスケープシーケンス

\a -- ベル文字(アラート)

\b -- 1文字分戻る

\f -- ページ送り(クリア)

\n -- 改行、復帰

\r -- 同じ行の先頭に戻る

\t -- 水平タブ

\v -- 垂直タブ

\\ -- \を表示

\" -- ダブルクォーテーション(")を表示

\' -- シングルクォーテーション(')を表示

\[ -- left square bracket

\] -- right square bracket

\ddd -- character denoted by its numeric value where ddd is a sequence of up to three decimal digits

使用例

my_string = "hello"
another_string = 'world'
print(my_string .. another_string) --> "helloworld"

print("10.2" + 1) --> 11.2
print(my_string + 1) -- error, can't convert "hello"
print(my_string .. 1) --> "hello1"

print("one\nstring") --> one
                     --> string

print("\097bc") --> "abc"

multi_line_string = [[
Here is a chunk of text that runs over several lines. This is all
put into the string and is sometimes very handy.
]]

For ループ

-- 1から10まえループ
for i = 1, 10 do
    print(i)
end

-- テーブル
t = { "a", "b", "c", "d" }
for i, v in ipairs(t) do
    print(v)
end

-- 辞書っぽく
d = {}
d["apple"] = 1
d["banana"] = 2

for i, v in ipairs(d) do
    print(v)
end

関数

-- MyPlusという名の関数で、 a + b の結果を返す
MyPlus = function(a, b)
    return a + b
end

-- MyMultipleという名の関数で、 a * b の結果を返す
function MyMultiple(a, b)
    return a * b
end

-- 関数を引数に渡すことができる
function operate(func, a, b)
    return func(a, b)
end
-- 使用例
print(operate(MyPlus, 4, 5)) --> 9


-- Create an adder function and return it
function create_adder(n)
    return function(a)
        return a + n
    end
end

adder = create_adder(2) -- n に2が入った状態で初期化。
print(adder(3)) --> 2+3 = 5
print(adder(10)) --> 2+10 = 12

配列(テーブル)

local num_table = {2, 4, 8, 16, 32}

-- 配列の長さを得る1
print(table.getn(num_table))

-- 配列の長さを得る2
print(#num_table)

リスト

local list = {}

table.insert(list, 2)
table.insert(list, 3)
table.insert(list, 4)

-- リストの長さを得る1
print(table.getn(list)) -- 3

-- リストのFor分
for i = 1, #list do
    local s = list [ i ]
    print( s )
end

要素にnil が入っているとその要素は長さに含まれません。

local list = {}

table.insert(list, 2)
table.insert(list, nil)
table.insert(list, 4)

-- リストの長さを得る1
print(table.getn(list)) -- 2