1

冗長な部分を避けるためにこのコードを書き直す方法を誰か教えてもらえますか?

   val lineSplit = line.split(" ")
      lineSplit match {
        case Array(cls @ TaggedString(), prop @ TaggedString(), value @ Literal(), ".") => {processProperty(prop);processLiteral(value)}
        case Array(cls @ TaggedString(), prop @ TaggedString(), value @ LiteralwithSchema(), ".") => {processProperty(prop);processExtendedLiteral(value)}
        case Array(cls @ TaggedString(), prop @ TaggedString(), value @ TaggedString(), ".") => {processProperty(prop);processTag(value)}
        case _ => throw new IllegalArgumentException("unable to identify line format")

      }

すでに見たことがあるかもしれませんが、抽出されたプロパティを持つ部分は常に同じです。その部分を十分に因数分解する方法はありますか?

あなたの入力のためのthx、

ステファン

4

2 に答える 2

1

あなたの場合、一致を2倍にし(カスタムエクストラクタを作成することもできます)、重複を避けるために、作業を行う関数を返します:

def badLine() = throw new IllegalArgumentException("unable to identify line format")
lineSplit match {
  case Array(cls @ TaggedString(), prop @ TaggedString(), x, ".") => 
    val processValue = x match {
      case value: Literal() => () => processLiteral(value)
      case value: LiteralwithSchema() ...
      ...
      case _ => badLine()
    }
    processProperty(prop)
    processValue()
  case _ => badLine()
}
于 2013-06-24T16:09:38.700 に答える