将值列表展开到案例中

时间:2016-11-18 18:09:58

标签: scala scala-macros

这就是我所拥有的:

sealed abstract class Codes(list: List[String])
object UVWCodes extends Codes(List("U", "V", "W"))
object XYZCodes extends Codes(List("X", "Y", "Z"))

我想使用宏将列出的值扩展为:

parse(str: String): Codes = str match {
  case "U" | "V" | "W" => UVWCodes
  case "X" | "Y" | "Z" => XYZCodes
}

由于代码是密封类,因此可以获取其子类列表。但是,如何提取代码文字列表(" U"," V"等)?

2 个答案:

答案 0 :(得分:1)

写作时

sealed abstract class Codes(list: List[String])

list只是构造函数参数,如果不使用,丢失。如果您使用关键字 val 作为前缀,则它将成为不可变属性,因此您可以访问外部

sealed abstract class Codes(val list: List[String])

UVWCodes.list // Valid code

答案 1 :(得分:1)

来自@ Edmondo1984的决定性贡献和来自其他地方的片段,这是一个完全编码的解决方案:

submitForm(value: any, originalRow: any){
  var dataPointID = originalRow.receivedRow.tDataPoint;
  for (let entry in DPS) {
    if (DPS[entry].tDataPoint === dataPointID) {
      DPS[entry].tDataPoint = String(this.updateForm.controls['dataPoint'].value);
      DPS[entry].tICCP = String(this.updateForm.controls['ICCP'].value);
      DPS[entry].tStartDate = String(this.updateForm.controls['startDate'].value);
      DPS[entry].tEndDate = String(this.updateForm.controls['endDate'].value);
      this['startDate'] = null;
      this['endDate'] = null;
    }
  }
}