Учитывая следующие функции:вызове функций, возвращаемые методами, которые принимают implicits
def foo()(implicit count: Int): (String => Seq[String]) = {
s => for (i <- 1 until count) yield s
}
Вызов apply()
на результат явно работает:
implicit val count = 5
val x = foo().apply("x") // <- works fine
И приравнивая результат к val
, который вам затем вызывается как функция, работает:
val f: String => Seq[String] = foo()
f("y") // <- works fine
Но пытаться сделать все это в одной строке, без apply
, путает компилятор, думая, вы передаете неявное явным образом:
val z = foo()("z") // type mismatch; found: String("z"), required: Int
Есть ли способ сделать это без любого явного apply
или промежуточного val
? Например, возможно ли каким-либо образом переместить объявление implicit
в возвращаемую анонимную функцию?