Skip to content

Instantly share code, notes, and snippets.

@rohinomiya
Created May 22, 2013 15:59
Show Gist options
  • Save rohinomiya/5628720 to your computer and use it in GitHub Desktop.
Save rohinomiya/5628720 to your computer and use it in GitHub Desktop.
Luaを使ってみた時の備忘録 ref: http://qiita.com/items/abeb1d69c640a27d97c5
-- ハイフンを2つ書くと1行コメントになる
--[[
複数行コメント
複数行コメント
複数行コメント
]]
-- 標準出力への改行付き出力
print("Hello, world!")
-- 標準出力への改行なし出力
io.write("Hello, world!")
io.write("Hello, everyone!")
-- 改行のみ
print()
-- 値には型があるが、変数には型がない
a = 1
-- リテラルは大文字小文字が区別される
ab = 1
aB = 2
AB = 3
print(ab, aB, AB)
-- 多重代入可能
a,b = 1,2
print(a,b)
-- 値のスワップも簡単
a,b = b,a
print(a,b)
-- 四則演算 + - * /
-- 剰余 %
-- べき乗 ^
x = 10
y = 3
z = x ^ y
print(z)
z = x % y
print(z)
-- 文字列
s1 = "ダブルクォートの中にダブルクォートを書くには\\でエスケープが必要\"こんな感じで\""
print(s1)
s2 = 'シングルクォートの中にシングルクォートを書くには\\でエスケープが必要\'こんな感じで\''
print(s2)
s3 = 'タブとか\t改行も\n書けまっせ'
print(s3)
-- 文字列の連結は「..」演算子
a = 1
print("a="..a)
--ヒアドキュメント
s = [[複数行文字列も
こうやって
代入可能]]
print(s)
s4 = [[この記号で囲むと、エスケープ\tシーケンスも\nそのまま表示されます]]
print(s4)
-- テーブル(配列/連想配列)
-- 添字は1から始まる
-- テーブル(配列 的使い方)
a = {1,2,3,"Hello, World!"}
print(a[1])
print(a[2])
print(a[3])
print(a[4])
-- 要素の個数 #
print(#a)
-- テーブル(連想配列 的使い方)
users = {name="Bob", age = 18}
print(users["name"], users["age"])
print(users.name, users.age)
-- 条件分岐 if
-- 偽:false nil
-- 真: (上記以外)
score = 70
if score > 60 then
print("score > 60")
elseif score > 40 then
print("score > 40")
else
print("score <= 40")
end
-- 関係演算子 < > >= <= == ~=(否定)
-- 論理演算子 or and not
score = 75
if score > 40 and score < 100 then
print("ok!")
end
-- 繰り返し while
i = 0
while i < 10 do
print(i)
i = i + 1
end
print()
-- 繰り返し repeat
i = 0
repeat
print(i)
i = i + 1
until i >=10
print()
-- ループ脱出 break
i = 0
while i < 10 do
print(i)
i = i + 1
if i > 4 then
break
end
end
print()
-- 繰り返し for
for i=0, 9 do
print(i)
end
print()
-- 繰り返し for 増分あり
for i=0, 9, 2 do
print(i)
end
print()
-- 繰り返し for テーブル(順番と値)
a = {12,24,"hey"}
for i, value in ipairs(a) do
print(i, value)
end
print()
-- 繰り返し for テーブル(キーと値)
users = {name="Bob", age = 18}
for key, value in pairs(users) do
print(key, value)
end
print()
-- 関数 引数・返り値なし
function greet()
print("Hello!")
end
greet()
-- 関数 引数・返り値あり
function multi(x,y)
return x * y
end
print(multi(12,10))
-- 複数の値を返すことも可能
function calc4(x,y)
return x + y, x - y, x * y, x / y
end
a,b,c,d = calc4(12,4)
print(a,b,c,d)
print()
-- local宣言しないと、関数内で宣言された変数もグローバル変数になるので注意
g = 1
function test()
local g = 2
print(g)
end
test()
print(g)
print()
-- 可変長引数
function sum(...)
local args = {...}
local total = 0
for i = 1, #args do
total = total + args[i]
end
return total
end
print(sum(1,2,3,4,5,6))
print()
-- 数値関数
print(math.min(1,2,3))
print(math.max(1,2,3))
print(math.ceil(2.1))
print(math.floor(2.1))
print(math.random()) -- 0 ~ 1 の実数
print(math.random(100)) -- 0 ~ 100 の整数
print(math.random(20,800)) -- 20 ~ 800 の整数
print()
-- 文字列関数
s = "Hello, world!"
-- 文字列長
print(string.len(s))
print(#s)
-- 部分文字列
print(string.sub(s,3,5))
-- 検索
print(string.find(s, "wor"))
-- 置換
print(string.gsub(s, "w", "W"))
-- 大文字化/小文字化
print(string.upper(s))
print(string.lower(s))
-- 逆順
print(string.reverse(s))
-- 文字列フォーマット
x = 10
y = 21.111
name = "Mike"
s = string.format("name:%s x:%10d y:%f", name, x, y) -- 右寄せ
print(s)
s = string.format("name:%s x:%-10d y:%f", name, x, y) -- 左寄せ
print(s)
s = string.format("name:%s x:%010d y:%f", name, x, y) -- 0埋め
print(s)
-- テーブル操作
-- ソート
a ={2, 25, 42, 1}
table.sort(a)
for i, v in ipairs(a) do
print(v)
end
print()
-- 挿入
a ={2, 25, 42, 1}
table.insert(a,"last")
for i, v in ipairs(a) do
print(v)
end
table.insert(a,4, "foo")
for i, v in ipairs(a) do
print(v)
end
print()
-- 削除
a ={2, 25, 42, 1}
table.remove(a,3)
for i, v in ipairs(a) do
print(v)
end
print()
-- 日付・時刻
-- 基準日からの秒数
t = os.time()
print(t)
-- システム日時
t = os.date()
print(t)
t = os.date("%Y-%m-%d")
print(t)
-- システム日時の各要素をテーブルで取得
t = os.date("*t")
for key,value in pairs(t) do
print(key,value)
end
print()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment