无法在类的“ this”方法中调用方法

时间:2019-01-29 18:41:30

标签: scala

我遇到

error: not found: value defineParser
[scalac-2.11]   def this(format: String) = this(format, defineParser(format))

当我尝试在类的this方法中调用某个方法以便根据格式动态返回解析器时。

类的整个结构如下:

class TimestampConversion(format: String, parser: DSVTimestampFormatter) extends ObjectConversion[Any] with FormattedConversion[DSVTimestampFormatter] {

  def defineParser(format: String): DSVTimestampFormatter = {
    // hidden implementation details
  }

  def this(format: String) = this(format, defineParser(format))
}

这在编译此类时失败。为什么我不能调用defineParser方法?在那里定义很好。

1 个答案:

答案 0 :(得分:0)

可以定义一个辅助构造函数,但是将apply工厂方法添加到伴随对象中会更加习惯。

还可以在主要构造函数中为该参数添加默认的arg,在此范围内更明显:

class C(format: String)(parser: Parser = C.defineParser(format))
object C { private def defineParser(format: String): Parser = ??? }

以下是规范语言(第5.3.1节),它表示您this调用的范围不在“类定义的大括号内”:

  

构造函数的签名和自构造函数调用   在以下范围内对定义进行类型检查和评估   封闭类定义时的效果,并增加   封闭类的任何类型参数,以及任何早期   封闭模板的定义。其余的构造函数   对表达式进行类型检查,并将其评估为函数体   当前课程。