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不表示值或方法,并且语言规范声明f()要有效,f必须具有方法类型或带有apply方法的值类型。我不知道如何轻松地“调整”编译器来改变这一点,但我怀疑这是否值得。如果您确实想达到这样的长度,只需将您的方法添加到Predef.

于 2012-10-19T05:44:59.353 回答