print "hello world!"
>lua5.1 test.lua hello world!
-- コメント文 --[[ コメント文 ]]
a=1 b="test" -- 文字列はダブルクォートでくくる c=nil -- nil は未定義値、偽を表す特殊な値 d=true
list={} list[1]="eins" list["two"]="zwei" list[3]="drei"
a={12,15,20} print(#a) -- 実行結果は 3
x=100 do y=5 z=30 end
function multiply(x,y) return x*y end
function print_value(x) local x=x print(x) x=5 print(x) end x=3 print(x) print_value(x) print(x) -- 実行結果は 3, 3, 5, 3
for i=1,10 do local y print(y) if y==nil then y=0 else y=y+1 end end -- 実行結果は nil が 10 個表示される (10 回ローカル変数が定義される)
a=123 b="123" if a==b then print("equal") else print("not equal") end -- 実行結果は not equal
i=5 while i>0 do print(i) i=i-1 end repeat print(i) i=i+1 until i>5 -- 実行結果は 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5
p=7 while true do p=p+1 -- break だけではエラーになる。 do break end p=p-1 end
total=0 for i=0,100,1 do total=total+i end print(total) -- 実行結果は 5050
list={} list[1]="eins" list["two"]="zwei" list[3]="drei" for key,value in pairs(list) do print(tostring(key).."="..tostring(value)) end -- 実行結果は 1=eins, 3=drei, two=zwei
a=0 while true do a=a+1 if a>3 then goto exit end print(a) end ::exit:: -- 実行結果は 1, 2, 3
function swap(x,y) x,y=y,x return x,y end a=1 b=2 print(a,b) a,b=swap(a,b) print(a,b) -- 実行結果は 1, 2, 2, 1
function f(a,b,...) print(a,b) c,d=... print(c,d) for i=3,select("#",...),1 do x=select(i,...) print(x) end end f(11,12,13,14,15,16,17) -- 実行結果は 11, 12, 13, 14, 15, 16, 17
multiply=function(x,y) -- function multiply(x,y) と同義 return x*y end print(multiply(2,3)) -- 実行結果は 6
function f(...) print(...) a={...} -- 可変引数→連想配列 print(a[1],a[2],a[3]) print(unpack(a)) -- 連想配列→可変引数 end f(1,2,3) -- 実行結果は 3 行とも 1, 2, 3
a=3 b=1 c=(a>b) and a or b print(c) -- 実行結果は 3
-- ファイル mod_test.lua module("mod_test",package.seeall) value=2 function box_muller() local alpha=math.random() -- package.seeall のおかげで使える local beta =math.random() return math.sqrt(-2*math.log(alpha))*math.sin(2*math.pi*beta) end
require "mod_test" print(mod_test.value) print(mod_test.box_muller()) -- mod_test.lua で box_muller の名前で定義した関数が呼ばれる -- 実行結果は 2, -1.422 など
a = {} local x = 20 for i=1,10 do local y = 0 a[i] = function () y=y+1; return x+y end end for i=1,10 do print(a[i]()) end -- 実行結果は 21 が 10 個表示される
obj={1,2,3,4,5,6} function plus(x,y) return x[1]+y end setmetatable(obj,{__add=plus}) print(obj+5) -- 実行結果は 6
HogeObject = { value = 3, toString = function(self) return "HogeObject: value="..tostring(self.value) end } print(HogeObject:toString()) -- 実行結果は "HogeObject: value=3"
HogeClass={} function HogeClass.new(value) local hogeObject = { value = value, toString = function(self) return "HogeClass: value="..tostring(value) end } return hogeObject end obj=HogeClass.new(5) print(obj:toString()) obj2=HogeClass.new(7) print(obj2:toString()) -- 実行結果は "HogeClass: value=5", "HogeClass: value=7"
HogeHogeClass={} function HogeHogeClass.new(value) local hogehogeObject = { toPlusOneString = function(self) return "HogeHogeClass: value="..tostring(value+1) end } local extends=HogeClass.new(value) setmetatable(hogehogeObject,{__index=extends}) return hogehogeObject end obj3=HogeHogeClass.new(9) print(obj3.value) print(obj3:toPlusOneString()) print(obj3:toString()) -- 実行結果は "HogeHogeClass: value=10", "HogeClass: value=9"
戻る