2013-11-22 55 views
0

我想实现类似如下:斯卡拉:模式匹配多个选项参数

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

什么是做到这一点的正确方法?

回答

3

我不知道我的理解,你在找什么,但:

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

这将返回空字符串,如果两个参数中至少有一个是空的,即:

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

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

但你可能应该只改变的参数类型Option[MyClass]Option[AnotherClass](如果可以的话)。

2

我马斯同意你的论点也许应该Option[MyClass]Option[AnotherClass]。但是,为了回答你原来的问题,你可以使用的理解,而不是模式匹配:

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

我真的很喜欢这个解决办法,但我接受@Marth的答案,这也正是我一直在寻找。 – Prasanna