9

通常のオブジェクトでは、次のことができます。

object A {
  def apply = "!"
}
A() // "!"

しかし、パッケージ オブジェクトでは、これは機能しません。

package object A {
  def apply = "?"
}
A.apply // "?"
A() // compile error
    // error: package A is not a value

基本的な制限はありますか?それとも、コンパイラを少し調整することで修正できる単なる実装上の制限ですか?

4

1 に答える 1

11

適用せずに実行できる唯一の方法は次のとおりです。

A.`package`()

これは、Aが値またはメソッドを示さないためです。言語仕様では、 forf()が有効であるためfには、メソッド型またはメソッドを含む値型が必要であると規定されていapplyます。コンパイラを「微調整」してこれを変更するのがどれほど簡単かはわかりませんが、努力する価値があるとは思えません。そのような長さに行きたい場合は、メソッドを に追加するだけの方が簡単Predefです。

于 2012-10-19T05:44:59.353 に答える