用于理解和分析的Scala

用于理解和分析的Scala,scala,for-comprehension,unapply,Scala,For Comprehension,Unapply,我有一个 object radExtractor{ def unapplySeq(row:HtmlTableRow):Option[List[String]]={ val lista = (for{ a<-row.getByXPath("td/span/a") ah= a.asInstanceOf[DomNode] if(ah.getFirstChild!=null) } yield a.asInstanceO

我有一个

object radExtractor{
    def unapplySeq(row:HtmlTableRow):Option[List[String]]={
      val lista = (for{
        a<-row.getByXPath("td/span/a")
        ah= a.asInstanceOf[DomNode]
        if(ah.getFirstChild!=null)
      } yield a.asInstanceOf[DomNode].getFirstChild.toString).toList
      lista match{
        case Nil=>None
        case l @ List(duns,companyname,address,city,postal,_bs,orgnummer, _*) =>Some(l) 
        case _ =>println("WTF");None
      }
    }
  }
但那就不那么性感了;)
谢谢

,因为您正在执行分配给
val
的模式匹配:

val radExtractor(duns,companyname,address,city,postal,_,orgnummer,_*)=rad
。。。匹配必须成功,否则您将遇到错误。上述语法在a之外是有效的,用于理解,Scala不为不匹配的情况提供任何特殊行为


要过滤出a中的不匹配值以供理解,请直接使用
左侧的模式,因为您正在对
val
赋值中执行模式匹配:

val radExtractor(duns,companyname,address,city,postal,_,orgnummer,_*)=rad
。。。匹配必须成功,否则您将遇到错误。上述语法在a之外是有效的,用于理解,Scala不为不匹配的情况提供任何特殊行为

要过滤出a中不匹配的值以便于理解,请直接使用

val radExtractor(duns,companyname,address,city,postal,_,orgnummer,_*)=rad
val toReturn = for {
  radExtractor(duns,companyname,address,city,postal,_,orgnummer,_*) <- rader
} yield Something(duns,companyname,address,city,postal,orgnummer)