我想实现以下目标:
private def msgPrefix(implicit myClass: MyClass, anotherClass: AnotherClass) = {
Option(myClass, anotherClass) match {
case Some(validMyClass, validAnotherClass) => validMyClass.process + validAnotherClass.process
case _ => ""
}
}
这样做的正确方法是什么?
答案 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("")
}