调用带有implicits的方法返回的函数

时间:2014-01-10 00:38:46

标签: scala anonymous-function implicit

给出以下功能:

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声明移动到返回的匿名函数中?

1 个答案:

答案 0 :(得分:2)

scala> (foo() _)("z")
res10: Seq[String] = Vector(z, z, z, z)