我试图深入了解 Joshua Suareth 的书 Scala 中第 93 页上关于绑定优先级的第四条规则。
根据这个规则:
由不在定义出现的源文件中的包子句提供的定义具有最低优先级。
我打算测试的正是这条规则。
所以我开始尝试遵循 Josh 在第 94 页上的思路。他创建了一个名为 externalbindings.scala 的源文件,我也做了同样的事情,对其进行了一些更改,如下所示
package com.att.scala
class extbindings {
def showX(x: Int): Int = {
x
}
object x1 {
override def toString = "Externally bound obj object in com.att.scala"
}
}
接下来,他要求我们创建另一个文件,以便我们测试上述规则。我创建了一个名为 priority.scala 的文件:
package com.att.scala
class PrecedenceTest { //Josh has an object here instead of a class
def testPrecedence(): Unit = { //Josh has main method instead of this
testSamePackage()
//testWildCardImport()
//testExplicitImport()
//testInlineDefinition()
}
println("First statement of Constructor")
testPrecedence
println("Last statement of Constructor")
def testSamePackage() {
val ext1 = new extbindings()
val x = ext1.showX(100)
println("x is "+x)
println(obj1) // Eclipse complains here
}
}
<package-name>.<object-name>.testSamePackage
现在,Josh 只需在 REPL 上执行该方法即可打印出示例中对象的值。他的输出是:
包测试中的外部绑定 x 对象
在我的版本中,文件位于 Eclipse 中,并且我有嵌入式 Scala 解释器。
Eclipse 在这里抱怨:println(obj)
,它说:not found value obj1
我在设置测试文件时做错了什么吗?我希望能够测试我上面提到的规则并获得输出:
com.att.scala 包中的外部绑定 obj 对象