Created
May 22, 2013 15:59
-
-
Save rohinomiya/5628720 to your computer and use it in GitHub Desktop.
Luaを使ってみた時の備忘録 ref: http://qiita.com/items/abeb1d69c640a27d97c5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- ハイフンを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