在普通物体上,我可以执行以下操作:
object A {
def apply = "!"
}
A() // "!"
但是在包对象上,这不起作用:
package object A {
def apply = "?"
}
A.apply // "?"
A() // compile error
// error: package A is not a value
是否存在一些基本限制?或者它只是一个实现限制,我可以通过调整编译器来解决这个问题吗?
答案 0 :(得分:10)
你可以在没有申请的情况下做到这一点:
A.`package`()
这是因为A
未表示值或方法,并且语言规范指出要使f()
有效,f
必须具有方法类型或值使用apply
方法键入。我不知道有多么容易“调整”编译器来改变它,但我怀疑这是值得的。如果你想要达到这样的长度,那么将方法添加到Predef
会更容易。