为什么apply()不能在包对象上以简写形式使用?

时间:2012-10-19 04:56:10

标签: scala

在普通物体上,我可以执行以下操作:

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

但是在包对象上,这不起作用:

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

是否存在一些基本限制?或者它只是一个实现限制,我可以通过调整编译器来解决这个问题吗?

1 个答案:

答案 0 :(得分:10)

你可以在没有申请的情况下做到这一点:

A.`package`()

这是因为A未表示值或方法,并且语言规范指出要使f()有效,f必须具有方法类型或值使用apply方法键入。我不知道有多么容易“调整”编译器来改变它,但我怀疑这是值得的。如果你想要达到这样的长度,那么将方法添加到Predef会更容易。