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

Rog*_*ach 8 scala

在普通对象上,我可以执行以下操作:

object A {
  def apply = "!"
}
A() // "!"
Run Code Online (Sandbox Code Playgroud)

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

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

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

Kim*_*bel 10

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

A.`package`()
Run Code Online (Sandbox Code Playgroud)

这是因为A不表示值或方法,并且语言规范声明f()要使其有效,f必须具有方法类型或具有方法的值类型apply.我不知道有多么容易"调整"编译器来改变它,但我怀疑这是值得的.如果你想要达到这样的长度,那么只需添加你的方法就更容易了Predef.