オブジェクトのプレフィックスメソッドを作成するために、メソッド名の最後に使用できるという考えに至った:
ので、次のように書きました。
def aaa: {
}
そしてそれはうまくコンパイルされます!しかし、これではだめなので、メソッドに何かを返させたいので、不確かなので、次のように書きます。
def aaa: = {
}
エラー!
- identifier expected but '=' found.
- not found: type <error>
わかりました。コンパイラが で壊れることを理解しました: =
。
def aaa: {
println("wow")
}
またエラー!
illegal start of declaration (possible cause: missing `=' in front of current method body)
次に、これを試します:
val a = aaa
そして、(上にカーソルを合わせるとaaa
)aaa
署名がdef aaa: AnyRef
であると表示されるので、次を試します。
def aaa: {
Global
}
はどこGlobal
ですかobject
。それでもエラー。だから、私の質問は: なぜこの構文が許可されているのですか? プレフィックスメソッドのように機能させることはできません。このメソッドを副作用に使用することも、何かを返すようにすることもできません。そもそもなぜこのように書くことができるのでしょうか。
アップデート:
今私はこれを試します:
def aaa: {} = {
Global
}
そしてそれは動作します。{}
を示しているように見えますAnyRef
。JavaScript のワンダーランドにいるような気分になります。