【Defold】Lua スクリプトの書式について
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