コードを書く
print("hello World!!\")
拡張子は.lua
としてファイルを保存
例えばexample.lua
とする
コマンドを入力し実行する
lua example.lua
一行コメント
--example
複数行コメント
--[[
example1
example2
]]
記号 | 内容 |
---|---|
\n | 改行 |
\a | BEEP音 |
\t | タブ |
\b | バックスペース |
\' |
シングルクォーテーション |
\" |
ダブルクォーテーション |
\\ |
バックスラッシュ |
エスケープシーケンスを特殊な文字として解釈する場合
print ("Hello World!\n")
print (’Hello World!\n’)
print "Hello World!\n"
エスケープシーケンスを特殊な文字として解釈しない場合
print ([[Hello World!\n]])
..
で文字列を連結できる
print ("Hello".."World!") -- HelloWorld!
Luaは動的型付け言語であり変数自体には型を持たないが参照する値は型を持つ
変数の宣言
a = 10
複数の変数を宣言する場合
a = 10 b = 20
多重代入
a, b = 10, 20
a = nil
a = true
b = false
条件式では nil と false の値のみが偽となり他のすべての値は真となる
つまり 空文字列 や 空テーブル や 0 などもすべて真となるので注意が必要
a = 10
a = 'abc'
Luaは文字列と数値を実行時に自動的に変換する
すべての数学演算は、文字列に適用されると、一般的な変換ルールに基づいてその文字列を数値に変換しようとする
逆に、文字列が期待されるところで数値が使れると、その数値は一般的な形式の文字列に変換される
a = function(b, c) return (b+c) end
配列型はなくテーブル型を使用する
tbl = {}
tbl[1] = "a" -- 要素1に代入
print( tbl[1] ) -- a
何も指定しなければ要素は0からではなく1から始まる
a = {"A", "B", "C", "D", "E"}
print( tbl[0] ) -- nil
print( tbl[1] ) -- A
要素を指定する場合
a = {[0]="X", [1]="A", [2]="B", [3]="C", [4]="D", [100]="E"}
print( tbl[0] ) -- X
print( tbl[1] ) -- A
テーブルは連想配列のように使うこともできる
a = {x=111, y=222, z=333}
上記と同じテーブル
a = {}
a['x'] = 111
a['y'] = 222
a['z'] = 333
print(a['x'])
print(a['y'])
print(a['z'])
ドット区切りにより連想配列を表現することも可能である
a = {}
a.x = 111
a.y = 222
a.z = 333
print(a.x)
print(a.y)
print(a.z)
スレッド 型は独立した実行のスレッドを表しコルーチンを実装するために使われる
ユーザーデータ 型は任意の C のデータを Lua の変数に格納するために使われる CとのAPIを通してのみ作成と変更が可能である
- グローバル変数
- プログラムのどこからでも使用可能
- ローカル変数
- スコープ内からのみ使用可能
明示的にlocal宣言されない変数は全てグローバル変数となる
例えば関数の中であってもlocal宣言しなければグローバル変数となる
v = 10 -- グローバル変数
function f(n)
v = n
end
f(2)
print(v) -- 2
v = 10 -- グローバル変数
function f(n)
local v -- ローカル変数
v = n
end
f(2)
print(v) -- 10
ローカル変数はそのスコープ内部で定義された関数から自由にアクセスできる
function out()
local x = 1
local function inner1()
x = x + 1
print(x)
end
local function inner2()
x = x + 1
print(x)
end
inner1() -- 2
inner2() -- 3
end
out()
ローカル変数のスコープはその宣言の後の最初の文から始まりその宣言を含む最も内側のブロックの無でない最後の文で終わる
x = 10 -- グローバル変数
do -- 新しいブロック
local x = x -- 新しい 'x' 、 値は 10
print(x) -- 10
x = x+1
do -- 別のブロック
local x = x+1 -- 別の 'x'
print(x) -- 12
end
print(x) -- 11
end
print(x) -- 10 (グローバル変数)
Lua の関数は全て無名関数であり
関数名は関数を保持する変数の名前である
f = function (n)
print (n)
return n
end
上記と同じ
function f(n)
print (n)
return n
end
引数の初期値は指定できないが 下記ように書くことで初期値の指定を実装可能である
function f(n)
local n = n or 'abc' -- nが未指定の場合にabcが代入される
return n
end
function f(...)
local n = {...}
for i in pairs(n) do
print(n[i])
end
end
f("x", "a", "b", "c")
exp = 1
if exp == 0 then
print("a")
elseif exp == 1 then
print("b")
else
print("c")
end
Luaにはswitch文はない
条件式がない場合、falseまたはnilであるば偽、それ以外は真と判定される
hoge = 1
if hoge then
print("1")
end
hoge = 0
if hoge then
print("2")
end
hoge = false
if hoge then
print("3")
end
hoge = nil
if hoge then
print("4")
end
比較には数値・文字列の変換は適用されない
下記の場合a == b
は偽と判定される
a = 1
b = "1"
if a == b then
print("a")
else
print("b")
end
whileでは繰り返しの中身を実行するかどうかの条件判定を最初に行う
i = 0
while i <= 100 do --条件が真である場合繰り返される
print(i)
i = i + 1
end
repeatでは繰り返しの中身を実行するかどうかの判定を最後に行う
i = 0
repeat
print(i)
i = i + 1
until i >= 100 --条件が偽である場合繰り返される
forは 初期値
終了値
増加値
をカンマで区切って指定する
for i = 1, 10, 1 do
print(i)
end
増加値
を省略した場合増加値は1となる
for i = 1, 10 do
print(i)
end
繰り返しを抜ける場合は break
を使う
continue
に相当するものはLuaには存在しない
i = 0
while i <= 100 do
i = i + 1
if i = 10 then
break
end
print (i)
end
break
はブロックの最後にしか書くことができない
例えばデバッグなどで任意の位置で break
したい場合は do
end
を使用する
i = 0
while i <= 100 do
i = i + 1
do
print (i)
break
end
end
イテレータ関数 pairs
ipairs
を使うことでジェネリックforを実装できる
テーブルの中身をすべて表示する場合
t = {a = 10, b = 20, c = 30}
for k,v in pairs(t) do
print(k.."="..v)
end
配列の中身をすべて表示する場合
t = {10, 20, 30}
for k,v in ipairs(t) do
print(k.."="..v)
end
記号 | 内容 |
---|---|
== | 等しい |
~= | 等しくない |
< | より少ない |
> | より多い |
<= | より少ないか等しい |
>= | より多いか等しい |
記号 | 内容 |
---|---|
and | かつ |
or | または |
not | でない |
do
end