为什么申请()不能在包对象的简写形式使用?(Why apply() can not be used

2019-08-01 15:52发布

在正常的对象,我可以做到以下几点:

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

但在包装的对象,这并不工作:

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

有一些基本限制? 还是仅仅是一个实现的限制,我可以通过调整编译器有点修复?

Answer 1:

你可以不用申请的唯一方法是这样的:

A.`package`()

这是因为A不表示一个值或一个方法,和语言规范规定为f()有效, f必须具有方法类型或与值类型apply方法。 我不知道一个如何能轻松地“调整”的编译器来改变这一点,但我怀疑它是值得的。 如果你想去这样的长度,它会更容易,只是你的方法添加到Predef



文章来源: Why apply() can not be used in shorthand form on package objects?
标签: scala