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引数を省略しつつ、メソッド定義をクラス定義の下に置けないか