Lua - 気になった特徴
Luaを触ってみて気になったとこつらつら書く。
テーブルとコロン記法
Luaはオブジェクト指向として設計されていないが、オブジェクト指向っぽく動かす仕組みがある。それがテーブルとコロン記法
テーブル
ハッシュテーブルと配列をがっちゃんこしたようなもの。文字列orインデックス数値=>オブジェクトへの対応をもつオブジェクト。
table.threeはtable['three']のシンタックスシュガー
table = {} table[1] = '1' table['two'] = 2 table.three = true
オブジェクトとしてクロージャを入れることもできて、それがメソッドのようにふるまう
ところでテーブルに入れられたオブジェクトからは、同じテーブルの他のオブジェクト(メソッド)が見えない。そこでメソッド呼び出し時にテーブル自身を渡してやる。
person.name_ = 'Silva' person.say_name = function(self) print(self.name_) end -- 以下でも同じ -- function person.say_name(self) -- print(self.name_) -- end person.say_name(person)
冗長な部分を削れるコロン記法。
省略した書き方
person.name_ = 'Silva' function person:say_name() print(self.name_) end person:say_name()
気になること
- 括弧はいつ省略可能か
- self引数を省略しつつ、メソッド定義をクラス定義の下に置けないか