在正常的对象,我可以做到以下几点:
object A {
def apply = "!"
}
A() // "!"
但在包装的对象,这并不工作:
package object A {
def apply = "?"
}
A.apply // "?"
A() // compile error
// error: package A is not a value
有一些基本限制? 还是仅仅是一个实现的限制,我可以通过调整编译器有点修复?
在正常的对象,我可以做到以下几点:
object A {
def apply = "!"
}
A() // "!"
但在包装的对象,这并不工作:
package object A {
def apply = "?"
}
A.apply // "?"
A() // compile error
// error: package A is not a value
有一些基本限制? 还是仅仅是一个实现的限制,我可以通过调整编译器有点修复?
你可以不用申请的唯一方法是这样的:
A.`package`()
这是因为A
不表示一个值或一个方法,和语言规范规定为f()
有效, f
必须具有方法类型或与值类型apply
方法。 我不知道一个如何能轻松地“调整”的编译器来改变这一点,但我怀疑它是值得的。 如果你想去这样的长度,它会更容易,只是你的方法添加到Predef
。