Рассмотрим файл bug.scala :
package sandbox
object Foo {
implicit def stringToInt(s: String) = 5
}
import Foo._
class Boo(val a: Int = "foo" / 3) {
val b: Int = "foo" / 3
def c(d: Int = "foo" / 3) = d
}
Он определяет неявное преобразование, импортирует его и использует его в трех немного разных сценариях. Скомпилируйте это:
E:\prog\scala\test>scalac bug.scala
bug.scala:9: error: value / is not a member of java.lang.String
class Boo(val a: Int = "foo" / 3) {
^
one error found
Кажется, что неявное преобразование не работает при использовании для параметра конструктора по умолчанию, но работает для других сценариев.
Теперь смотрите это:
package sandbox
object Foo {
implicit def stringToInt(s: String) = 5
}
object dummy
import Foo._
import dummy._
class Boo(val a: Int = "foo" / 3) {
val b: Int = "foo" / 3
def c(d: Int = "foo" / 3) = d
}
Мы просто добавили пустой объект и импортировали его. Теперь файл компилируется без ошибок!
Я вижу здесь две возможности: 1) Моя голова болталась со мной. 2) В компиляторе есть ошибка. Кто-нибудь может подтвердить, что это последнее?
(Использование Scala 2.8.1.)