给出以下功能:
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
声明移动到返回的匿名函数中?
答案 0 :(得分:2)
scala> (foo() _)("z")
res10: Seq[String] = Vector(z, z, z, z)