Два набора параметров конструктора в классе scala
Что делает этот код? Почему существуют два набора параметров конструктора?
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 набора параметров. Он не компилируется. Итак, каков смысл двух наборов параметров конструктора?
Ответы
Ответ 1
В соответствии с scala спецификацией (см. раздел 5.3) второй набор параметров посвящен неявным параметрам. Разделение параметров в двух наборах позволяет вам определить только неявный паметатор, а другой - контекстно определенный.
На самом деле довольно странно, что компилятор использует неявные параметры во втором наборе.