奇怪的Scala错误与默认构造函数参数的隐式转换有关

时间:2011-01-09 17:38:40

标签: scala

考虑文件 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。)

1 个答案:

答案 0 :(得分:2)

绝对是一个错误。我代表你提出了这个问题。

https://issues.scala-lang.org/browse/SI-4141