问题描述
假设我有这两个类:
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
? - "Shadow"
def inst
不知何故,所以我只能使用全局val inst
一个?
解决方法
来自https://dotty.epfl.ch/docs/reference/dropped-features/package-objects.html:
如果源文件 src.scala
包含此类顶级定义,它们将被放入名为 src$package
的合成对象中
也许在这种情况下使用“自动生成的”object
名称访问 val inst
可以吗?