Классы вариантов и поведение прокси в Scala 2.9

При переносе нашего кода на Scala 2.9 мы обнаружили большие его участки, которые не работали и терпели неудачу. Мы отследили это до классов case, которые расширяют Proxy, не будучи равными. В нашем коде мы не расширяем Proxy напрямую, мы просто расширяем классы в библиотеках, которые расширяют Proxy.

Любая помощь будет принята с благодарностью.

В 2.8

scala> case class Test(a:String) extends Proxy {
     |   def self = a
     | }
defined class Test

scala> 

scala> val label = new Test("bla")
label: Test = bla

scala> println(label == label) // this is TRUE
true

scala> println(label == "bla")
true

В 2.9

scala> case class Test(a:String) extends Proxy {
     |   def self = a
     | }
defined class Test

scala> 

scala> val label = new Test("bla")
label: Test = bla

scala> println(label == label) // this is now FALSE
false

scala> println(label == "bla")
true

Обновление

Я думаю это может быть ошибкой только в Scala 2.9. В противном случае, если у вас есть класс case, который расширяет любой другой класс, вам нужно исследовать иерархию этого базового класса, чтобы убедиться, что он ни в коем случае не расширяет Proxy. Мы не сможем сделать это в нашем коде, мы просто сможем исправить наиболее очевидные ошибки. Если это предполагаемое поведение, предупреждение компилятора является обязательным. Это звучит примерно правильно?

Обновление

Также обсуждается в списке рассылки scala .

Обновление

Я зарегистрировал ошибку

8
задан Dave 15 July 2011 в 16:25
поделиться