繁体   English   中英

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

[英]Weird Scala bug related to implicit conversions on default constructor parameters

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

绝对是一个错误。 我已经代表你寄了。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM