Account = { balance = 0 } function Account.withdraw (v) Account,balance = Account.balance - v endこれはテーブル内にメソッド的なものを定義した例ですが、これだと
a = Account Account = nil a.withdraw(10) ---> エラーとなってしまいます。
そこで、インボカントが登場する
function Account.withdraw ( self, v ) self.balance = self.balance - v end
多くの言語では、1番目のself(またはthisとなっている言語も多い)の引数は見えなくなっている。
これはシンタックスシュガーで実現しているものだ。
function Account:withdraw( v ) ---> 「.」ではなく、「:」を使うと、1番目の引数にselfが自動的に付加されたこととみなされる。
self.balance = self.balance - v end
呼び出しも「:」を使えば第1引数にオブジェクト自体を代入したことと同じとなる。通常記法も使えるがその場合はやや間が抜けた記述となるだろう。
a = Account, Account = nil
a.withdraw(a, 10) --> 通常記法
a:withdraw(10) --> シンタックスシュガー。第1引数にオブジェクト自身をインボカントとして渡す形となる。