Lua 勉強日記(2)

変数、関数

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) do
print(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) do
print(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 から始まる。これはなんでこんな仕様にしたんだろう?????

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください