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

标签 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)

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

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

最佳答案

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

Scala spec :

An implicit parameter list (implicit p1,…,pn) of a method marks the parameters p1,…,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/

相关文章:

java - Avro 字段名称以数字/整数开头

string - 为什么 Scala 'String' 对象的迭代器和 'List[Int]' 对象的迭代器在这里表现不同?

arrays - scala 中令人难以置信的隐式数组转换

scala - 有没有办法通过单个 HList 定义多个隐式证据?

scala - Scala隐式隐式

scala - 如何在 scala 枚举值中添加点

scala - SBT 在 Sources 中查找子类型

Scala匹配某些词并计算频率

scala - 为什么asInstanceOf不发起隐式转换?

scala - 从必须实现类型类的方法返回值