scala类中的两组构造函数参数

PeW*_*eWu 10 constructor scala class

这段代码有什么作用?为什么有两组构造函数参数?

class A(val x: Int)(val y: Int)
Run Code Online (Sandbox Code Playgroud)

我可以初始化一个对象并使用这两个字段:

val a = new A(5)(7)
println(a.x + ", " + a.y)
Run Code Online (Sandbox Code Playgroud)

如果我将它作为案例类,我只能通过第一组参数进行匹配.

case class A(x: Int)(y: Int)
val a = A(5)(7)
a match {
  A(x) => println(x)
}
Run Code Online (Sandbox Code Playgroud)

无法创建3组参数.它不编译.那么两组构造函数参数的含义是什么?

Nic*_*las 7

根据scala规范(参见第5.3节),第二组参数专用于隐式参数.将参数分为两组允许您仅定义非隐式paameter,并让另一个进行上下文定义.

实际上,编译器在第二组中处理非隐式参数是很奇怪的.

  • 谢谢.如果我将_implicit_关键字添加到第二个集合中,它将开始是隐式的,但如果没有_implicit_关键字,则不会隐式隐式.无论如何,scala规范不允许第二组中的非隐式参数. (2认同)