comment.lua
1 2 3 4 5 6 7 8 | -- 一行コメント
--[[
複数行のコメント 1
複数行のコメント 2
複数行のコメント 3
]]
print("コメントテスト")
|
comment.lua の実行結果は:
[wtopia lua.hajime]$ lua comment.lua
コメントテスト
[[...]] の間には, 改行を挟むこともできる.
[==[...]==] の間には [[どんなときも]] を出力できる.
specialstr.lua
1 2 3 4 5 6 7 8 9 10 11 | print[[
we are the future.
[よい一日, 過ごそう.]
"\n"
"\a", "\b"
新宇体]]
print[==[
こんにちは.
[[どんなときも.]]
挨拶は重要です.]==]
|
specialstr.lua の実行結果は:
[wtopia lua.hajime]$ lua specialstr.lua
we are the future.
よい一日, 過ごそう.
新宇体
Lua で用意されているのは, 以下の8つの基本型:
nil
ブーリアン (真偽) -> boolean
数値 -> number
文字列 -> string
関数 -> function
テーブル -> table
スレッド -> thread
ユーザーデータ -> userdata
nil は C 言語の null にあたるもので, 初期化していない変数は, 値が nil になっている:
[wtopia lua.hajime]$ lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> local i
> =type(i)
nil
>
また, ブーリアン型は, true か false の真偽値を取る.
これらは, 基本関数 type() を使って確認できる.
type.lua
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | i = 50
print( type(i) ) -- number
print( type(43) ) -- number
s = "abcdefg"
print( type(s) ) -- string
print(type ("feifei") ) -- string
v = true
print ( type(v) ) -- boolean
add = function(a, b) return (a+b) end
print ( type(add) ) -- function
function sub(a, b)
return (a-b)
end
print ( type(sub) ) --function
|
type.lua の実行結果は:
[wtopia lua.hajime]$ lua type.lua
number
number
string
string
boolean
function
function
Lua で文字列を操作するには, string ライブラリを使う.
substr.lua
1 2 3 4 | -- substr.lua
str = "abc%&8feifei`-*`"
name = string.sub(str, 7, 12)
print(name)
|
substr.lua の実行結果は:
[wtopia lua.hajime]$ lua substr.lua
feifei
string.sub() は, 文字列の部分文字列を取り出す関数.
上記のプログラムは文字列 str の 7 文字目kら 12 文字目までの部分文字列 feifei を抜き出す.
str_code.lua
1 2 3 4 5 6 7 8 9 10 | -- str_code.lua
s = "abcdefg"
for i = 1, string.len(s) do
ch = string.sub(s, i, i)
code = string.byte(s, i, i)
fmt = string.format("[%s:%d:%#x]", ch, code, code)
print(fmt)
end
|
str_code.lua の実行結果は:
[wtopia lua.hajime]$ lua str_code.lua
[a:97:0x61]
[b:98:0x62]
[c:99:0x63]
[d:100:0x64]
[e:101:0x65]
[f:102:0x66]
[g:103:0x67]
string.sub(s, 2, 4) をオブジェクト指向風に書くと:
s:sub(2, 4)
となる.
同様にして, string.len(“abc”) も:
s:len()
のように記述できる.
str_test.lua
1 2 3 4 5 6 7 8 9 | -- str_test.lua
s = "abcdefg"
for i = 1, s:len(s) do
ch = s:sub(i, i)
code = s:byte(i, i)
fmt = "[%s:%#x]"
str = fmt:format(ch, code)
print(str)
end
|
str_test.lua の実行結果は:
[wtopia lua.hajime]$ lua str_test.lua
[a:0x61]
[b:0x62]
[c:0x63]
[d:0x64]
[e:0x65]
[f:0x66]
[g:0x67]
Lua には, 配列変数がなく, 代わりにテーブル型を利用する.
テーブル型を生成するには, テーブルコンストラクタを利用する:
tbl = {}
tbl[1] = "a" -- 要素 1 (先頭) に, "a" を代入
print( tbl[1] ) -- 要素 1 の値を参照する
table_test.lua
1 2 3 4 5 6 7 8 9 | -- table_test.lua
tbl = {"A", "B", "C", "D", "E"}
print( tbl )
print( tbl[0] )
print( tbl[1] )
print( tbl[3] )
print( tbl[5] )
|
table_test.lua の実行結果は:
[wtopia lua.hajime]$ lua table_test.lua
table: 0x100106000
nil
A
C
E
tbl = {“A”, “B”, “C”, “D”, “E”} は以下のように書き換えても大丈夫:
tbl = {}
tal[1] = "A"
tal[1] = "B"
tal[1] = "C"
tal[1] = "D"
tal[1] = "E"
テーブル型は, 配列変数のように使えるほかに, 連想配列としても利用できる.
連想配列とは, キーと値のペアでデータを保存できる機能のこと.
table_test2.lua
1 2 3 4 5 6 7 8 9 | -- table_test2.lua
age = {}
age["feifei"] = 28
age["yangyang"] = 8
age["yangguang"] = 2
age["kankan"] = 1
print( age["feifei"] .. " 歳" )
print( age["kankan"] .. " 歳")
|
table_test2.lua の実行結果は:
[wtopia lua.hajime]$ lua table_test2.lua
28 歳
1 歳
上記のプログラムは, 下記のように書いても同じ意味になる:
age = {feifei=28, yangyang=8, yangguang=2, kankan=1}
print( age["feifei"] )
print( age["kankan"] )
table_test3.lua
1 2 3 4 5 | -- table_test3.lua
age = {feifei=28, yangyang=8, yangguang=2, kankan=1} -- "" 付けないこと
print( age["feifei"] .. " 歳" )
print( age["kankan"] .. " 歳")
|
table_test3.lua の実行結果は:
[wtopia lua.hajime]$ lua table_test3.lua
28 歳
1 歳
以下のように配列の要素の番号を指定できるようになっている.
table_test4.lua
1 2 3 4 5 6 7 | -- table_test4.lua
t = {[3] = "C", [2] = "D", [0] = "A", [1] = "F"}
print( t[0] )
print( t[1] )
print( t[2] )
print( t[3] )
|
table_test4.lua の実行結果は:
[wtopia lua.hajime]$ lua table_test4.lua
A
F
D
C
pairs() 関数を利用する.
enum.lua
1 2 3 4 5 | -- enum.lua
tbl = {zz = 25, ff=28, yy=8, gg=2, kk=1}
for key, val in pairs(tbl) do
print(key, val)
end
|
enum.lua の実行結果は:
[wtopia lua.hajime]$ lua enum.lua
zz 25
ff 28
yy 8
gg 2
kk 1