假设我有一个对象,如:
object MyObj {
def apply(args: List[String])(implicit v: Int): Unit => Int = (_: Unit) => args.length + v
}
Run Code Online (Sandbox Code Playgroud)
如果我想 MyObj.apply,我必须这样做:
implicit val v = 5
val myObj = MyObj(List("a", "b", "c"))
myObj()
Run Code Online (Sandbox Code Playgroud)
但这感觉是多余的。我希望能够做的是:
implicit val v = 5
MyObj(List("a", "b", "c"))()
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎不起作用。系统抱怨我遗漏了我隐含的论点,这是有道理的,但令人失望。
有什么方法可以apply直接调用从方法返回的函数,而无需先将其分配给值?
这是 Scala 2.XX 中的一个已知问题,并已在 dotty 中修复。
参考这张票的第三点:
将显式参数传递给隐式参数就像普通应用程序一样编写。这与省略应用方法相冲突。例如,如果你有
def f(implicit x: C): A => B 那么 f(a) 会将参数 a 传递给隐式参数,并且必须编写 f.apply(a) 以将 f 应用于常规参数。
https://github.com/lampepfl/dotty/issues/1260
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |