分割コンパイルすると、AbstractMethodError
$ scala -version Scala code runner version 2.8.0.r20633-b20100122020238 -- Copyright 2002-2010, LAMP/EPFL
--- src/Parser.scala ---
class Parser {
def parse(t: Any): Unit = {
}
}
--- src/ResponseCommon.scala ---
trait ResponseCommon extends Parser {
private[this] var paramsParser: Parser = null
def withParamsParser(parser: Parser) = {paramsParser = parser; this}
override abstract def parse(t: Any): Unit = t match {
case ("params", value: List[_]) => value.foreach {paramsParser.parse(_)}
case _ => super.parse(t)
}
}
--- src2/MyResponseCommon.scala ---
class MyResponseCommon extends Parser with ResponseCommon
object MyResponseCommon {
def main(args: Array[String]) {
new MyResponseCommon
}
}
別々にコンパイルすると、
mkdir -p classes/out scalac -d classes/out src/*.scala mkdir -p classes/out2 scalac -cp classes/out -d classes/out2 src2/*.scala scala -cp classes/out:classes/out2 MyResponseCommon
AbstractMethodErrorになる。
java.lang.AbstractMethodError: MyResponseCommon.ResponseCommon$$paramsParser_$eq(LParser;)V
at ResponseCommon$class.$init$(ResponseCommon.scala:2)
at MyResponseCommon.(MyResponseCommon.scala:1)
at MyResponseCommon$.main(MyResponseCommon.scala:5)
at MyResponseCommon.main(MyResponseCommon.scala)
1回でコンパイルすれば、
mkdir -p classes/out scalac -d classes/out src/*.scala src2/*.scala scala -cp classes/out:classes/out2 MyResponseCommon
問題無し。バグ報告してみた。なんか内容が化けてしまった。ファイル添付しといたから、分かるかな。








