2017-09-17 4 views
1

以下のSwift PlaygroundコードサンプルのaddTwoNumbers関数が、(Int、Int) - > Intの関数として "(+)"を返し、後で2つの数値を一緒に加算する方法を完全に失っています。単に "addTwoNumbers(2,2)"を呼び出します。Swift関数が数学演算子を単独で返すことはなぜ可能ですか?

この創造的な解決法はそこに存在しないと思われるので、私はSwiftのマニュアルで説明を見つけることができませんでした。私はStackOverflowの答えが他の質問への回答として同様のコードを投稿したが、なぜか "=(+)"が働いているとは決して説明しなかった。私は何が欠けていますか?

注意:私は演算子がファーストクラス関数であることを理解します。私は高次関数の概念も理解しています。私はトピックサンプル(+)にとどまるようにコードサンプルを短くしました。

let addTwoNumbers: (Int, Int) -> Int = (+) 
print(addTwoNumbers(5,3)) //8 
+0

簡素にあることを

は注意してください。かっこ内の+をラップするとオブジェクトになりますか?したがって、2つの引数を指定して呼び出すと、2 + 2と等価になります。 –

+0

@Carcigenicate:https://math.stackexchange.com/questions/168378/operator-vsfunctionからのコメント。「すべての演算子は関数です。したがって、関数が演算子(この場合は(+)も関数である)を返すとき、それを呼び出す唯一の方法は、print( "hello" )?言い換えると、2つの引数をとる+関数を呼び出していますが、+(2,2)を入力する代わりに、提供されたコードサンプルに従ってadd(2,2)をタイプする必要があります。 –

+0

私の例と質問は、高次関数の領域のSwift言語に合わせていますが、あなたの答えはどの言語でもその概念をよりよく理解するための方向を示してくれます。 –

答えて

0

あなたの例では何も本当に何それがないこと、すなわちaddTwoNumbers、変数に(演算子、関数や関数である値とみなすことができる)値+を割り当てるで、+を返しません。

この変数のタイプは(Int, Int) -> Intです。つまり、intを返す2つのintの関数です。現在の関数は特殊な変数であり、一種の後置演算子としてかっこを取ることができます。通常の変数のようなビットは.です。かっこなしでaddTwoNumbersという名前を書くと、それは関数(+となる)を参照しますが、それらといくつかのオペランドを使って関数が代わりに適用され、それらの引数で関数が返すものはすべて値になります。 let addTwoNumbers: (Int, Int) -> Int = (+)はかなり同等@Carcigenicateくださいfunc addTwoNumbers(_ a: Int, _ b: Int) -> Int { return a + b }

関連する問題