形状へのメソッドの追加
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 42/73。
Lua OOP の章で、function は他の値と同じように table に格納できることを学びました。Shape はそれらの function フィールドも記述できます。つまり、shape を data と behavior の小さな契約に変えられます。
method フィールドでは、functions の章で学んだ function-type 構文を使用します。最初のパラメーターは慣例的に self と名付けます。これは method が属する table です。また、shape は自分自身を参照することさえできます。
type Greeter = {
name: string,
greet: (self: Greeter) -> string,
}shape を実装するには、フィールドに function を格納し、その function に self パラメーターを指定します。
local greeter: Greeter = {
name = "Ana",
greet = function(self: Greeter): string
return `Hello, I'm {self.name}`
end,
}これを call するには、自分で table を self として渡します:greeter.greet(greeter)。self を通して、method は call された対象の table の fields を読み取ります。
table を2回書くのは少し扱いにくく感じますが、Lua の解決策はすでに知っています:コロンです。次のレッスンでは、: 構文をこれらの型付き shape に関連付けます。
チャレンジ
簡単Rectangleという名前の型エイリアスを作成し、以下を定義してください。
- 型が
numberのwidth - 型が
numberのheight area:width * heightを返すメソッド(self: Rectangle) -> numberperimeter:2 * (width + height)を返すメソッド(self: Rectangle) -> number
幅4、高さ6で、両方のメソッドを実装した型Rectangleの変数rectを作成してください(selfパラメーターを忘れないでください)。
それぞれ1行ずつ、以下を出力してください(ドット構文でメソッドを呼び出し、rectをselfとして渡します)。
- 長方形のarea
- 長方形のperimeter
- 長方形のwidth
自分で試してみよう
-- ここにコードを書いてください
-- 1) 2つの数値フィールドと2つのメソッドを持つ型 Rectangle を定義する
-- 2) 両方のメソッドを実装する rect (width 4, height 6) を作成する
-- 3) area、perimeter、width を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数自分で練習してみよう: Luaオンラインコンパイラ