我想到了一个想法,为了为对象创建一个前缀方法,我可以:
在方法名称的末尾使用,因此,我写道:
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 仙境。