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

2020/05/07DEVELOP

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

Posted by kazupon