与非隐式参数结合使用时,为什么隐式参数不起作用

Man*_*wat 3 scala implicit

一个非常简单的用例,假设我有一个Foo接受 2 个参数的类,1 个是普通参数,1 个是隐式参数。

class Foo(val msg: String, implicit val n: Int) {
  def multiplier = msg * n
}

implicit val num: Int = 4
val foo = new Foo("yo")
println(foo.msg)
Run Code Online (Sandbox Code Playgroud)

我知道如果我将隐式参数移动到另一个列表(即 curried ),它会起作用class Foo(val msg: String)(implicit val n: Int)。但是,出于某种原因,我不想这样做。

有人可以解释为什么当前版本的实现不起作用吗?

Sum*_*uma 6

语言规范就是这样写的。您必须在单独的参数列表中定义。语言规范根本不涉及隐式参数,只涉及隐式参数列表:

斯卡拉规范

方法的隐式参数列表 (implicit p1,…,pn)将参数p1,...标记pn为隐式。一个方法或构造函数只能有一个隐式参数列表,并且必须是给出的最后一个参数列表。

可能可以检查邮件列表存档或其他地方是否存在某种原因。