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
function Account:withdraw( v ) ---> 「.」ではなく、「:」を使うと、1番目の引数にselfを書いたことと同じこととみなされる。 self.balance = self.balance - v end
a = Account Account = nil a.withdraw(a, 10) --> 通常記法。第1引数にテーブル(オブジェクト)自身を渡す。 a:withdraw(10) --> シンタックスシュガー。第1引数にオブジェクト自身を渡していることになる。