Lua 関数からテーブルを参照する(self と : の使い方)

目次

概要

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)と同じになります。

 

:(コロン)は、構文糖衣(シンタックスシュガー)です。

関連の記事

Lua 関数のサンプル

△上に戻る