Joshua Suareth の著書 Scala の 93 ページにあるバインディングの優先順位に関する 4 番目のルールを詳しく理解しようとしています。
この規則によると:
定義が発生するソース ファイルにないパッケージ句によって使用可能になった定義の優先度は最も低くなります。
私がテストしようとしているのはこのルールです。
そこで、94 ページの Josh の一連の考えをたどろうとしました。彼は 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"
}
}
次に、上記のルールをテストできる別のファイルを作成するように依頼されました。precedence.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
}
}
これで Josh は<package-name>.<object-name>.testSamePackage
、REPL でメソッドを実行するだけで、彼の例のオブジェクトの値を出力できるようになりました。彼の出力は次のとおりです。
パッケージ テストで外部的にバインドされた x オブジェクト
私のバージョンでは、ファイルは Eclipse にあり、組み込みの Scala インタープリターがあります。
Eclipseはここで不平を言います: println(obj)
、それは言います:not found value obj1
テストファイルの設定で明らかに間違ったことをしていますか? 上記のルールをテストして、出力を取得できるようにしたいと思います。
パッケージ com.att.scala 内の外部バインドされた obj オブジェクト