一个非常简单的用例,假设我有一个类 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)
我知道如果我将隐式参数移动到另一个列表,即 curry
class Foo(val msg: String)(implicit val n: Int)
,它会起作用。 .但是,出于某种原因,我不想这样做。有人可以解释为什么当前版本的实现不起作用吗?
最佳答案
语言规范就是这样写的。您必须在单独的参数列表中定义。语言规范根本不涉及隐式参数,仅涉及隐式参数列表:
Scala spec :
An implicit parameter list
(implicit p1,…,pn)
of a method marks the parametersp1
,…,pn
as implicit. A method or constructor can have only one implicit parameter list, and it must be the last parameter list given.
也许可以检查邮件列表文件或其他地方是否有某种原因。
关于scala - 与非隐式参数结合使用时,为什么隐式参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59999853/