3
다음 ADT 용 생성기를 쓰고 있습니다. 아이디어는 무작위 데이터로 블록을 생성하는 것입니다. blockGen
메서드에 컴파일러 오류 Type mismatch: expected: Seq[Field], actual:Gen[Field]
이 있습니다. 내가 도대체 뭘 잘못하고있는 겁니까?이해를위한 스칼라의 형식 불일치 오류
EDIT
오류 즉 yield Block(id, fields)
이 방법의 마지막 줄에 fields
으로한다.
def blockGen(b: Block): Gen[Block] = for {
id <- b.blockId
fields <- b.fields.map(f => fieldGen(f))
} yield Block(id, fields)
ADT
trait Data {}
trait Field extends Data {
val name: String
val value: String
}
case class StringField(name: String, value: String) extends Field
case class NumberField(name: String, value: String) extends Field
case class Block(blockId: Field, fields: Seq[Field]) extends Data
발전기
def blockGen(b: Block): Gen[Block] = for {
id <- b.blockId
fields <- b.fields.map(f => fieldGen(f))
} yield Block(id, fields)
def fieldGen(fieldType: Field): Gen[Field] = {
for {
f <-
fieldType match {
case _: NumberField => numGen
case _: StringField => strGen
}
} yield f
}
val strGen: Gen[StringField] = for {
name <- Gen.identifier
value <- Gen.alphaStr
} yield StringField(name, value)
val numGen: Gen[NumberField] = for {
name <- Gen.identifier
value <- Gen.numStr
} yield NumberField(name, value)
그 메시지를 생성 하시겠습니까? (분명히, 질문은 어떤 식별자가 타입 불일치를 갖는지에 대한 질문입니다.) – GreenAsJade
@GreenAsJade는 잘못된 라인을 추가합니다. 편집 섹션을 참조하십시오 –
'필드'는'Seq [Gen [필드]]'의 요소, 즉'Gen [필드]'이고,'블록'생성자는'Seq [필드]' –