無名関数の型定義
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 23/73。
Luaでは、関数は値です。関数を変数に格納したり、受け渡したりしてきました: local f = function(x) return x * 2 end。これらの無名関数(関数式)は、名前付き関数とまったく同じように型注釈を受け取ります:
local double = function(x: number): number
return x * 2
end
local shout = function(text: string): string
return string.upper(text) .. "!"
endパラメーターには、括弧内で name: type を指定し、戻り値の型は閉じ括弧の後に続けます。名前付き関数との唯一の違いは、function キーワードに名前がなく、式全体が変数に代入されることです。
JavaScriptやTypeScriptを見たことがあるなら、Luauにはアロー関数がないことに注意してください。=> 構文はありません。すべての関数式は、長い形式でも短い形式でも、function ... end と記述します。
いったん代入すれば、他の関数と同じように変数を通じて呼び出せます。double(21) は 42 を返し、チェッカーは記述した注釈に照らしてすべての呼び出しを検証します。
チャレンジ
簡単この名前付き関数を、すべての型注釈を維持したまま、ローカル変数に格納された匿名関数として書き換えてください:
function subtract(a: number, b: number): number
return a - b
endつまり、同じパラメーター型と戻り値の型を使って、local subtract = function(...) ... endを作成してください。
次に、型指定された匿名関数をさらに2つ作成してください:
createMessage:text: stringを受け取り、文字列"Message: [text]"を返します(戻り値の型はstring)isPositive:num: numberを受け取り、その数が0より大きい場合はtrue、それ以外の場合はfalseを返します(戻り値の型はboolean)
次の呼び出し結果を、それぞれ独自の行に出力してください:
subtract(10, 3)createMessage("Hello World")isPositive(-5)isPositive(8)
自分で試してみよう
-- ここにコードを書いてください
-- local subtract = function(a: number, b: number): number ... end
-- local createMessage = function(text: string): string ... end
-- local isPositive = function(num: number): boolean ... end
-- 次に4つの結果を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数自分で練習してみよう: Luaオンラインコンパイラ