Предположим, что мы имеем объект, который принимает функцию в качестве параметра метода apply
:Как сделать два параметра функции, как неявное
object Wrapper {
def apply(block: TypeA => String) = {
TypeA a = ...
block(a)
}
}
TypeA
является тип областью применения.
Теперь, когда я определяю встроенный блок можно определить TypeA
параметр как неявное:
Wrapper { implicit a => functionThatUseImplicitA() }
Но что, если block
параметр не Function1
, но Function2
? Как определить оба параметра как неявные?
object Wrapper2 {
def apply(block: (TypeA, TypeB) => String) = {
TypeA a = ...
TypeB b = ...
block(a, b)
}
}
Это один не работает:
Wrapper { implicit (a, b) => functionThatUseImplicitAB() }
Единственный способ решения проблемы является определить их как вальса:
Wrapper { (a, b) =>
implicit val ia = a
implicit val ib = b
functionThatUseImplicitAB()
}
Спасибо!
Не могли бы вы сказать мне, как решить эту проблему с кэрри функций? functionThatUseImplicit * от внешнего API – 1esha
@AlexeyRomantchouk: Я обновил свой ответ. Он решает вашу проблему, когда вы можете изменить определение 'Wrapper'. – senia
Спасибо! Это именно то, что я ищу – 1esha