Dеarスカラ座、Scalaでは、「大文字小文字の」匿名関数は実際にどのように機能しますか?
scala> val f1: ((Int, Int)) => Int = { case (a, b) => a + b }
f1: ((Int, Int)) => Int = <function1>
scala> val f2: (Int, Int) => Int = { case (a, b) => a + b }
f2: (Int, Int) => Int = <function2>
ハァッ!
scala> f1(1, 2)
res2: Int = 3
[OK]を...
scala> def takesIntInt2Int(fun: (Int, Int) => Int) = fun(100, 200)
takesIntInt2Int: (fun: (Int, Int) => Int)Int
scala> def takesTuple2Int(fun: ((Int, Int)) => Int) = fun(100, 200)
takesTuple2Int: (fun: ((Int, Int)) => Int)Int
scala> takesIntInt2Int(f2)
res4: Int = 300
scala> takesIntInt2Int(f1)
<console>:10: error: type mismatch;
found : ((Int, Int)) => Int
required: (Int, Int) => Int
takesIntInt2Int(f1)
^
scala> takesTuple2Int(f1)
res6: Int = 300
scala> takesTuple2Int(f2)
<console>:10: error: type mismatch;
found : (Int, Int) => Int
required: ((Int, Int)) => Int
takesTuple2Int(f2)
右。そして今、これを見てください!
scala> takesTuple2Int { case (a, b, c) => a + b + c }
<console>:9: error: constructor cannot be instantiated to expected type;
found : (T1, T2, T3)
required: (Int, Int)
takesTuple2Int { case (a, b, c) => a + b + c }
^
scala> takesIntInt2Int { case (a, b, c) => a + b + c }
<console>:9: error: constructor cannot be instantiated to expected type;
found : (T1, T2, T3)
required: (Int, Int)
takesIntInt2Int { case (a, b, c) => a + b + c }
と同様に、srslyが? o_O両方がrequired: (Int, Int)
エラーになります。
なぜこのような匿名機能でcase
を使用するのですか?
'case'キーワードを使用せずにすべてを行うことができれば幸いです。通常の開発者の観点から、FunctionとPartialFunctionの構文の違いはなぜですか? –
@MichałRus正直言って、これはいつも私を少し気にしました。 HaskellとClojureは、関数のパラメータに直接パターンマッチングを表現するための構文がずっと簡単です。 – wingedsubmariner