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

Class scala类中的两组构造函数参数,class,scala,constructor,Class,Scala,Constructor,这个代码是做什么的?为什么有两组构造函数参数 class A(val x: Int)(val y: Int) 我可以初始化对象并使用两个字段: val a = new A(5)(7) println(a.x + ", " + a.y) 如果将其设置为case类,则只能通过第一组参数进行匹配 case class A(x: Int)(y: Int) val a = A(5)(7) a match { A(x) => println(x) } 不可能创建3组参数。它不能编译。那么这两

这个代码是做什么的?为什么有两组构造函数参数

class A(val x: Int)(val y: Int)
我可以初始化对象并使用两个字段:

val a = new A(5)(7)
println(a.x + ", " + a.y)
如果将其设置为case类,则只能通过第一组参数进行匹配

case class A(x: Int)(y: Int)
val a = A(5)(7)
a match {
  A(x) => println(x)
}
不可能创建3组参数。它不能编译。那么这两组构造函数参数的含义是什么呢?

根据(见第5.3节),第二组参数专用于隐式参数。将参数划分为两个集合允许您仅定义非隐式参数,并允许根据上下文定义另一个参数

class A(val x: Int)(val y: Int)

实际上,编译器在第二个集合中使用非隐式参数是非常奇怪的

谢谢。如果我将implicit关键字添加到第二个集合中,它开始是隐式的,但是如果没有implicit关键字,它就不是隐式的。无论如何,scala规范不允许在第二个集合中使用非隐式参数。。。规范的这一部分似乎很奇怪:语法下面给出的示例似乎与gramar不符。“类测试(a:Int)(b:Int)(c:Int)”是一个有效的类定义。@PeWu+1,因为有短语“没有隐式关键字,它不是隐式的”:)这不是我编造的。我在scala swing库中发现了这种结构: