全局/本地命名冲突的解决方法



假设我有这两个类:

class A {
def foo(i: String) = println(s"${i}")
def foo(i: String, j: Int) = println(s"${i} ${j}")
}
class B {
def foo(i: Int) = println(s"${i}")
def foo(i: Int, j: String) = println(s"${i} ${j}")
}

我有一个与全局变量和类中的方法同名的变量:

val inst = A()
abstract class AppB extends App { 
def inst = B()
}

我扩展了以上内容:

object MyApp extends AppB {
// Should reference A
inst.foo("s11")
inst.foo("s22", 11)

// Should reference B
inst.foo(33)
inst.foo(44, "s33")
}

假设我不想重命名,有没有办法:

  • 引用全局val inst
  • "阴影"def inst,所以我只能使用全局val inst

来源https://dotty.epfl.ch/docs/reference/dropped-features/package-objects.html:

如果源文件src.scala包含这样的顶级定义,它们将被放在名为src$package的合成对象中

也许使用";自动生成的";object名称访问val inst在这种情况下可以工作吗?

最新更新