При миграции нашего кода на Scala 2.9 мы обнаружили большие его участки, которые не работали и терпели неудачу. Мы отследили это до классов case, которые расширяют Proxy, не будучи равными. В нашем коде мы не расширяем Proxy напрямую, мы просто расширяем классы в библиотеках, которые расширяют Proxy.
Любая помощь будет принята с благодарностью.
In 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
In 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.
Обновить
Я зарегистрировал ошибку