scala - 全局/本地命名冲突的解决方法
问题描述
假设我有这两个类:
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
可以工作?
推荐阅读
- c - 检查 pthread 句柄是否正在休眠
- javascript - 添加计算按钮以执行脚本
- scala - 如何在 Spark Scala 项目中调用另一个模块的文件
- reactjs - Redux Observables + Jest:EventEmitter 事件监听器未触发
- c# - 如何创建自定义设置 msi 包/wix 工具集/自定义操作
- arrays - Angular 7,如何使用 Sort() 方法对 Observable 数组进行排序
- python - 如何检查字典的两个值是否存在于同一索引中?
- pdf - Flutter for Web 可以显示 Pdf 或 Webview 吗?
- python-3.x - Keras:在 Jupyter Notebook 中显示模型形状
- file - 有没有办法将单个文件一个接一个地提供给 Jenkins 作业,以便它对这些文件采取行动?