为什么我不能在Scala中的this.apply(_)中省略“apply”?

时间:2011-12-24 20:31:07

标签: scala types apply

请注意以下代码

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

任何人都可以向我解释发生了什么事吗?

1 个答案:

答案 0 :(得分:11)

你不能因为构造函数中的 this()是对这个对象的构造函数的调用( this()在其他地方生成编译失败)并且不能进入 apply()调用,因为它会隐藏构造函数并使得无法调用对象中的另一个构造函数。 this(args)总是调用构造函数方法(在Java和Scala中),所以在你自己的对象中,你总是必须显式调用 apply(args)