目次
概要
Luaの関数からテーブルを参照する方法です。
Luaでは、テーブルを使ってオブジェクトのような構造を表現できます。
その際、関数(メソッド)から自分自身のテーブルを参照するためにselfまたは:を使用します。
Luaのテーブルとして以下がありますが
{ "red", "blue" } -- 配列風(数値キー)
{ name = "red" } -- 辞書風(文字列キー)
今回の例は後者であり、配列ではなくテーブル(連想配列)です。
selfを明示してテーブルを参照する
selfを明示的に引数として受け取る書き方です。
local MyTable = {
name = "red"
}
function MyTable.sayColor(self)
print("color is " .. self.name .. "!") -- color is red!
end
MyTable.sayColor(MyTable)
MyTableはテーブルです。
nameはテーブルのフィールド(キー)です。
function MyTable.sayColor(self) の部分は、第1引数としてselfを受け取ります。
MyTable.sayColor(MyTable)は、引数としてMyTableを渡しています。
このため、関数内のselfはMyTableを指します。
注意
selfは予約語ではありません。自由に名前変更可能です。
ただし事実上の標準(デファクトスタンダード)です。
:(コロン)を使ったメソッド定義
:(コロン)を使うことでselfを明示せずに書くことができます。
local MyTable = {
name = "red"
}
function MyTable:sayColor()
print("color is " .. self.name .. "!") -- color is red!
end
MyTable:sayColor()
5行目のfunction MyTable:sayColor()は、
function MyTable.sayColor(self)と同じになります。
つまり、:を使うと、暗黙的に第1引数にselfが追加されます。
またselfには呼び出し元のテーブルが入ります。
9行目のMyTable:sayColor()は、
MyTable.sayColor(MyTable)と同じになります。
:(コロン)は、構文糖衣(シンタックスシュガー)です。
関連の記事
