Простите, если об этом уже спрашивали в другом месте.У меня есть вопрос о синтаксисе Scala, включающий значения функций и неявные параметры.
Мне удобно использовать имплициты с функцией карри в Scala.Например, если у меня была функция суммы и я хотел сделать второй аргумент неявным:
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>
Однако сигнатура функции во втором подходе сильно отличается (каррирование выражается явно).Простое добавление неявного ключевого слова в 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 _
^
Это наводит меня на мысль, что функции, имеющие неявные параметры, должны иметь указанные параметры, определенные при создании значения функции, а не при последующем применении значения функции.Это действительно так?Можете ли вы когда-нибудь использовать неявный параметр со значением функции?
Спасибо за помощь!