2014-01-03 6 views
6

После компиляции кода в Scala 2.9.1:Scala случае класс разница копирования метод между 2.9 и 2.10

scala> case class Foo(a: String)(val b: Int = 1) 
defined class Foo 

scala> val foo = Foo("some")(2) 
foo: Foo = Foo(some) 

scala> foo.copy("another")() 
res1: Foo = Foo(another) 

но в 2.10.3 мы получаем следующее сообщение об ошибке:

scala> foo.copy("another")() 
<console>:11: error: not enough arguments for method copy: (b: Int)Foo. 
Unspecified value parameter b. 
      foo.copy("another")() 

Может кто-то объяснить почему это изменилось? И я также хотел бы знать, если есть какой-то умный способ сделать это, кроме foo.copy («другой») (foo.b)

+1

Похож на регресс, сообщите об этом [здесь] (https://issues.scala-lang.org/secure/Dashboard.jspa). – sschaef

ответ

3

Это, к сожалению, дизайн: https://issues.scala-lang.org/browse/SI-6068

Auxiliary пар блоки в таких случаях, как правило, используются только для имплицитов. Они в противном случае имеют ограниченное использование, поскольку они не участвуют в сопоставлении с образцом или (как вы видели) в операциях копирования.

+2

Лучшее сообщение об ошибке из компилятора или даже предупреждение в определении 'Foo' было бы неплохо. – sschaef