Menu
Coddy logo textTech

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

実装においてコロンがそれを隠している場合でも、型定義(型定義の形)では selfexplicitly に宣言していること(deposit: (self: Account, amount: number) -> ())に注目してください。コロンは構文糖衣(シンタックスシュガー)であり、パラメータ自体は依然として存在し、type がそれを明記しています。何も返さない methods は空の返り値 -> () で型付けされます。

calls(呼び出し)もすでに知っているのと同じルールに従います。account:deposit(250)account.deposit(account, 250)same です。OOP の章と同じ実行時動作であり、Luau はその上に型を追加しただけです。

challenge icon

チャレンジ

簡単

以下のプロパティを持つ Account という名前の型エイリアスを作成してください:

  • string 型の owner
  • number 型の balance
  • deposit(self: Account, amount: number) -> ()
  • getBalance(self: Account) -> number

owner が "Maya"、balance が 1500 のテーブル account を作成し、コロン構文による定義function account:deposit(amount: number) …)を使用して両方のメソッドをアタッチしてください。deposit は balance に amount を加算し、getBalance は現在の balance を返します。

コロン呼び出しを使用して以下を行ってください:

  1. balance を print する
  2. 250 を deposit する
  3. balance を再度 print する
  4. owner を print する

自分で試してみよう

-- ここにコードを書いてください
-- 1) 型 Account を定義する(メソッドは型の中で self を明示的に取る)
-- 2) account テーブルを作成し、コロン構文で deposit/getBalance をアタッチする
-- 3) balance を出力し、250 を deposit し、再度 balance を出力し、owner を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Luau入門のすべてのレッスン