Lua 勉強日記(2)
2008/05/18
変数、関数
Luaは 動的な型の言語 である。つまり、変数は型を持たず、値が型を持つ。型定義の構文はない。すべての値は自分自身で型を保持している。
Lua 5.1 リファレンスマニュアル
Luaには8つの基本型がある。 nil、ブーリアン、数値、文字列、関数、ユーザーデータ、スレッド、テーブル
Lua 5.1 リファレンスマニュアル
- 配列はテーブルで実装されている?配列は、array = {“first”, “second”} と定義し、テーブルは、table = {first = “john”, second = “paul”} と定義する。
- ちょっと試した感じだと、{xx=123}のようなテーブルリテラルで代入を行なう時にはテーブルのキーに数値は指定できないみたい。後からなら追加できる。
- 変数をブロック内に局所化するには、local を指定して宣言する。localで宣言された変数のスコープは、レキシカルスコープとなる。
- 関数もファーストクラスオブジェクト。
- レキシカルスコープ + 関数がファーストクラスオブジェクト = クロージャが使える。
var.lua
-- 変数宣言 a = 100 b = "文字列" c = [[これも文字列(ヒアドキュメント風にもできる)]]print(a .. " " .. b .. " " .. c)-- 配列の扱い array = {"月", "火", "水", "木", "金", "土", "日"}for i, element in pairs(array) doprint(string.format("%d: %s", i, element))end-- テーブルの扱い beatles_table = {first = "john", second = "paul"}table.insert(beatles_table, 3, "ringo") -- 配列として要素を指定位置に挿入する。 beatles_table["forth"] = "george"-- 連想配列のように、挿入する。for key, value in pairs(beatles_table) doprint(string.format("%10s: %s", key, value))end-- 関数function print_plus_one(num)print(num + 1)end print_plus_one(100) func_var = print_plus_one -- 関数もファーストクラスオブジェクトだから変数に、代入できる。 func_var(200) -- 変数に代入した関数も、普通の関数のように呼べる。
実行結果
C:\lua_example>lua5.1.exe var.lua 100 文字列 これも文字列(ヒアドキュメント風にもできる) 1: 月 2: 火 3: 水 4: 木 5: 金 6: 土 7: 日 3: ringo first: john forth: george second: paul 101 201
テーブル周りに、少しクセがあるようです。
配列のインデックス(添字)は、0 からではなく、1 から始まる。これはなんでこんな仕様にしたんだろう?????