我遇到
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
方法?在那里定义很好。
答案 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
调用的范围不在“类定义的大括号内”:
构造函数的签名和自构造函数调用 在以下范围内对定义进行类型检查和评估 封闭类定义时的效果,并增加 封闭类的任何类型参数,以及任何早期 封闭模板的定义。其余的构造函数 对表达式进行类型检查,并将其评估为函数体 当前课程。