これがすでに他の場所で尋ねられているなら、私を許してください。関数値と暗黙のパラメーターに関するScala構文の質問があります。
私はScalaのカリー化機能で暗黙を使用することに慣れています。たとえば、sum関数があり、2番目の引数を暗黙的にしたい場合:
scala> def sum(a: Int)(implicit b: Int) = a + b
sum: (a: Int)(implicit b: Int)Int
関数値構文を使用してこれを行う方法はありますか?暗黙の値を少し無視して、私は通常、次のようなカリー化された関数値を記述します。
scala> val sum2 = (a: Int) => (b: Int) => a + b
sum: (Int) => (Int) => Int = <function1>
ただし、2番目のアプローチの関数シグネチャは大きく異なります(カリー化は明示的に表現されています)。暗黙のキーワードをbに追加するだけではあまり意味がなく、コンパイラも文句を言います。
scala> val sum2 = (a: Int) => (implicit b: Int) => a + b
<console>:1: error: '=>' expected but ')' found.
val sum2 = (a: Int) => (implicit b: Int) => a + b
^
さらに、関数値を取得するための最初のアプローチからの合計を部分的に適用すると、同様に問題が発生します。
scala> val sumFunction = sum _
<console>:14: error: could not find implicit value for parameter b: Int
val sumFunction = sum _
^
これにより、暗黙のパラメーターを持つ関数は、関数値が後で適用されるときではなく、関数値が作成されるときに決定されたパラメーターを持っている必要があると私は信じています。これは本当に本当ですか?関数値で暗黙のパラメーターを使用できますか?
助けてくれてありがとう!