これは期待どおりに機能しません (run
外部からパッケージ private を呼び出そうとしているためServices
):
object Services {
class HelloPrinter {
private[Services] def run = "Hello"
}
}
val obj = new Services.HelloPrinter
しかし、驚くべきことにこれはうまくいきます:
val obj: {def run: String} = new Services.HelloPrinter
obj.run
HelloPrinter はパッケージの可視性ルールのために構造型と一致しないため、コンパイラのバグであると言えます。コンパイルする必要はまったくありません。
次の例では、プログラムはコンパイルされますが、実行時例外 ( java.lang.NoSuchMethodException
)がスローされます。
class HelloPrinter {
private[HelloPrinter] def run = "Hello"
}
val obj: {def run: String} = new HelloPrinter
obj.run
これは私が見逃している言語機能またはルールですか、それとも合法的に Scala のバグですか?