2017-03-20 103 views
2

匹配我有以下的情况下类:Omiting参数斯卡拉

case class Cls(a: Int, b: Long, c: String, f: Int, d: Long, e: Long) 

现在的模式匹配我只想匹配类,并非所有的参数:

clsOpt match { 
    case Some(Cls(a, b, c, f, d, e)) => println("matched") 
} 

其实我不关心params值。有什么方法可以更简洁地编写它?

clsOpt match { 
    case Some(Cls) => println("matched") // compile-error 
} 

回答

4

使用此模式

case Some(c: Cls) => 

如下:

scala> case class Cls(a: Int, b: Long, c: String, f: Int, d: Long, e: Long) 

定义的类CLS

scala> val x: Option[Cls] = Some(Cls(1, 2, "3", 4, 5, 6)) 
x: Option[Cls] = Some(Cls(1,2,3,4,5,6)) 

scala> x match { case Some(c: Cls) => println(s"matched: $c") case None => } 
matched: Cls(1,2,3,4,5,6) 
+1

还值得注意的是,你还可以忽略'C'。 (':Cls)=> println(“matched”)' –

2

你可以提取内部类是这样的:

clsOpt match { 
    case Some(_) => println(clsOpt.get) 
    case None => println("n") 
} 

或者你可以只用下划线忽略值:

clsOpt match { 
    case Some(Cls(_,_,_,_,_,_)) => println("matched") 
} 
+2

这是真的,但修改'Cls'(添加/删除字段)可能会导致不必要的编译错误 –