Menu
Coddy logo textTech

無名関数の型定義

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 を返し、チェッカーは記述した注釈に照らしてすべての呼び出しを検証します。

challenge icon

チャレンジ

簡単

この名前付き関数を、すべての型注釈を維持したまま、ローカル変数に格納された匿名関数として書き換えてください:

function subtract(a: number, b: number): number
    return a - b
end

つまり、同じパラメーター型と戻り値の型を使って、local subtract = function(...) ... endを作成してください。

次に、型指定された匿名関数をさらに2つ作成してください:

  • createMessagetext: stringを受け取り、文字列"Message: [text]"を返します(戻り値の型はstring
  • isPositivenum: numberを受け取り、その数が0より大きい場合はtrue、それ以外の場合はfalseを返します(戻り値の型はboolean

次の呼び出し結果を、それぞれ独自の行に出力してください:

  1. subtract(10, 3)
  2. createMessage("Hello World")
  3. isPositive(-5)
  4. 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つの結果を出力する
quiz icon腕試し

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

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

自分で練習してみよう: Luaオンラインコンパイラ