请注意以下代码
trait Example {
type O
def apply(o: O)
def f(o: O) = this.apply(o)
}
在Scala中编译好。我希望我可以像往常一样遗漏apply
,写下def f(o: O) = this(o)
。但是,这会产生令人兴奋的错误消息
type mismatch; found : o.type (with underlying type Example.this.O)
required: _31.O where val _31: Example
possible cause: missing arguments for method or constructor
任何人都可以向我解释发生了什么事吗?
答案 0 :(得分:11)
你不能因为构造函数中的 this()是对这个对象的构造函数的调用( this()在其他地方生成编译失败)并且不能进入 apply()调用,因为它会隐藏构造函数并使得无法调用对象中的另一个构造函数。 this(args)总是调用构造函数方法(在Java和Scala中),所以在你自己的对象中,你总是必须显式调用 apply(args)