Selfとコロンメソッド
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 43/73。
rect.area(rect) と書いても機能しますが、Lua OOP の章で学んだより良い方法があります。それが colon(コロン)です。rect:area() もまったく同じ呼び出しであり、Lua はコロンの前の table を最初の引数 self として automatically に渡します。
コロンは define する場所でも役立ちます。function account:deposit(amount) は、隠された最初のパラメータ self をあなたに代わって宣言します:
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Maya", balance = 1500}
function account:deposit(amount: number)
self.balance += amount -- self は暗黙的
end
function account:getBalance(): number
return self.balance
end実装においてコロンがそれを隠している場合でも、型定義(型定義の形)では self を explicitly に宣言していること(deposit: (self: Account, amount: number) -> ())に注目してください。コロンは構文糖衣(シンタックスシュガー)であり、パラメータ自体は依然として存在し、type がそれを明記しています。何も返さない methods は空の返り値 -> () で型付けされます。
calls(呼び出し)もすでに知っているのと同じルールに従います。account:deposit(250) は account.deposit(account, 250) と same です。OOP の章と同じ実行時動作であり、Luau はその上に型を追加しただけです。
チャレンジ
簡単以下のプロパティを持つ Account という名前の型エイリアスを作成してください:
string型のownernumber型のbalancedeposit—(self: Account, amount: number) -> ()getBalance—(self: Account) -> number
owner が "Maya"、balance が 1500 のテーブル account を作成し、コロン構文による定義(function account:deposit(amount: number) …)を使用して両方のメソッドをアタッチしてください。deposit は balance に amount を加算し、getBalance は現在の balance を返します。
コロン呼び出しを使用して以下を行ってください:
- balance を print する
250を deposit する- balance を再度 print する
- owner を print する
自分で試してみよう
-- ここにコードを書いてください
-- 1) 型 Account を定義する(メソッドは型の中で self を明示的に取る)
-- 2) account テーブルを作成し、コロン構文で deposit/getBalance をアタッチする
-- 3) balance を出力し、250 を deposit し、再度 balance を出力し、owner を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数