【问题标题】:Trying to skip implicit parameter list试图跳过隐式参数列表
【发布时间】:2016-02-21 01:55:04
【问题描述】:

我想调用一个带有隐式参数的函数返回的函数,简单而优雅。这不起作用:

def resolveA(implicit a: A): String => String = { prefix =>
  s"$prefix a=$a"
}

case class A(n: Int)
implicit val a = A(1)

println(resolveA("-->"))  // won't compile

我已经弄清楚发生了什么:Scala 看到 ("-->") 并认为这是试图显式填充隐式参数列表。我想将其作为 prefix 参数传递,但 Scala 将其视为 a 参数。

我尝试了一些替代方法,比如在隐式参数列表之前放置一个空参数列表 (),但到目前为止,我一直被 Scala 认为返回函数的参数是试图填充的事实所阻止在resolveA的隐式参数列表中。

有什么好的方法来做我在这里尝试做的事情,即使它不如我上面尝试的语法好?

【问题讨论】:

  • @som-snytt,您删除的答案中的implicitly 对我的真实代码很有帮助!我已经找到了一个很好解决问题的案例。

标签: scala implicit


【解决方案1】:

另一种选择是使用由resolveA 返回的String => String 函数的apply 方法。这样编译器就不会混淆参数列表,而且比写implicltly[A]要短一点。

scala> resolveA[A].apply("-->")
res3: String = --> a=A(1)

【讨论】:

  • 嗯,是的!这比我迄今为止使用的解决方案要好得多,即明确地拼出隐式参数。顺便说一句,我刚刚注意到我不需要 [A] 类型参数;我现在将其从问题中删除。 (这是一个巨大的简化的真实代码到处都有类型参数。)
猜你喜欢
  • 1970-01-01
  • 2016-11-18
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
相关资源
最近更新 更多