【问题标题】:Invoking functions returned by methods that take implicits调用隐式方法返回的函数
【发布时间】:2014-01-10 08:49:01
【问题描述】:

给定以下函数:

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

【问题讨论】:

    标签: scala anonymous-function implicit


    【解决方案1】:
    scala> (foo() _)("z")
    res10: Seq[String] = Vector(z, z, z, z)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 2021-04-20
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多