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"
戻る