【发布时间】:2017-02-23 18:26:03
【问题描述】:
我在尝试使用名为 clone 的方法创建隐式类时遇到意外编译错误(在 scala 2.11.8 中)。
以下简化用法:
class Foo(val bar: String)
object Foo {
implicit class Enrich(foo: Foo) {
def clone(x: Int, y: Int): Int = x + y
}
}
object Main extends App {
val foo = new Foo("hello")
println(foo.clone(1, 2)) // <- does not compile
}
产生以下错误:
类 Object 中的方法克隆不能在 Foo 中访问 不允许受保护的方法克隆,因为前缀类型 Foo 不允许 符合访问发生的对象 Main
但是,我可以手动应用隐式类并成功编译:
println(Foo.Enrich(foo).clone(1, 2)) // <- OK
如果我将方法重命名为其他名称(例如clone2),代码将按预期编译。
我认为这在某种程度上与 java.lang.Cloneable 周围的魔法有关,但该方法不期望参数。
那么这里发生了什么?
【问题讨论】:
标签: scala scala scala-2.11