重载的构造函数错误

时间:2010-06-29 16:14:42

标签: scala constructor overloading

我有以下课程:

class Step(kind:TipoStep.Value,
           message:String = "",
           study:List[Formula] = List(),
           lastAdd:Set[Formula] = Set(),
           lastDel:Set[Formula] = Set(),
           add:List[Formula] = List(),
           del:List[Formula] = List()
           ) {

  def this(step:Step,
           kind:TipoStep.Value,
           message:String = "",
           study:List[Formula] = List(),
           lastAdd:Set[Formula] = Set(),
           lastDel:Set[Formula] = Set()) = this(kind, message, study, lastAdd, lastDel, step.getAllAdd, step.getAllDel)

 /* ... */
}

编译器显示了folloging错误:

error: ambiguous reference to overloaded definition,
both method init$default$5 in object Step of type => scala.collection.mutable.Set[org.lorea.pltl.formula.Formula]
and  method init$default$5 in object Step of type => scala.collection.mutable.Set[org.lorea.pltl.formula.Formula]
match expected type scala.collection.mutable.Set[org.lorea.pltl.formula.Formula]
step = new Step(TipoStep.R_fixpoint, s, List(c1, c2), news)

1 个答案:

答案 0 :(得分:3)

多个类似形式的形式参数的存在以及在主构造函数中使用默认值会使得哪些形式构造函数参数被默认以及哪个指定了实际参数是不明确的。

解决它的一种方法是在构造函数调用中使用命名参数赋值。