首页 > 解决方案 > 为什么隐式参数与非隐式参数结合使用时不起作用

问题描述

一个非常简单的用例,假设我有一个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)

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

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

标签: scalaimplicit

解决方案


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

斯卡拉规范

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

可以在邮件列表档案或其他地方检查是否有某些原因。


推荐阅读