scala case class именованные параметры

Есть ли (или будет ли в ближайшей функции) в scala возможность создать класс case с именованными параметрами? Я хочу создать объект класса case с использованием именованных параметров в конструкторе.

В моих кейс-классах много полей. Наличие конструкторов с множеством неименованных параметров подвержено ошибкам.

Хотелось бы получить (на данный момент не рабочий пример):

case class X(x0:String, x1:Int, x2:String)
val x = X(x0="Xstring", x1=12, x2="x2String")

В качестве обходного пути мы могли бы предоставить фабричный метод, как показано ниже, но это уродливое решение:

case class X(x0:String, x1:Int, x2:String)
object X {
    private nullX = X(null, null, null)
    def createX = nullX.copy _
}

val x = X.createX(x0="Xstring", x1=12, x2="x2String")

Какие-нибудь подсказки? :)

ИЗМЕНИТЬ: это была ошибка в плагине intellij idea scala в какой-то старой версии. Пожалуйста, больше не голосуйте против;)


person pawel.panasewicz    schedule 20.08.2012    source источник
comment
Я использую scala 2.9.1-1. Я скопировал ваше заявление в REPL, и оно сработало.   -  person tgr    schedule 20.08.2012
comment
В Scala уже есть именованные параметры и параметры по умолчанию.   -  person Kaito    schedule 20.08.2012
comment
Проверьте свою версию Scala с помощью: scala -version   -  person Jack    schedule 20.08.2012


Ответы (1)


Именованные аргументы и аргументы по умолчанию были введены в Scala 2.8

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_27).
Type in expressions to have them evaluated.
Type :help for more information.

scala> case class X(x0:String, x1:Int, x2:String)
defined class X

scala> val x = X(x0="Xstring", x1=12, x2="x2String")
x: X = X(Xstring,12,x2String)
person Brian Smith    schedule 20.08.2012