Scala:模式匹配多个选项参数

时间:2013-11-22 01:01:53

标签: scala pattern-matching

我想实现以下目标:

  private def msgPrefix(implicit myClass: MyClass, anotherClass: AnotherClass) = {        
    Option(myClass, anotherClass) match {
      case Some(validMyClass, validAnotherClass) => validMyClass.process + validAnotherClass.process
      case _       => ""
    }
  }

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

我不确定我理解你在寻找什么,但是:

 private def msgPrefix(implicit myClass: MyClass, anotherClass: AnotherClass) = {        
   (Option(myClass), Option(anotherClass)) match {
     case (Some(validMyClass), Some(validAnotherClass)) => validMyClass.process + validAnotherClass.process
     case _ => ""
   }
 }

如果两个参数中至少有一个为null,则返回空字符串,即:

scala> msgPrefix(MyClass("foo"),null)
res2: String = ""

scala> msgPrefix(MyClass("foo"),AnotherClass("bar"))
res3: String = foobar

但您可能只需将参数类型更改为Option[MyClass]Option[AnotherClass](如果可以的话)。

答案 1 :(得分:2)

我同意Marth的观点,你的论点应该是Option[MyClass]Option[AnotherClass]。但是要回答你原来的问题,你可以使用for comprehension而不是模式匹配:

private def msgPrefix(implicit myClass: MyClass, anotherClass: AnotherClass) = {
  val prefix = for {
    validMyClass <- Option(myClass)
    validAnotherClass <- Option(anotherClass)
  } yield validMyClass.process + validAnotherClass.process
  prefix.getOrElse("")
}