Scala:模式匹配多个选项参数
我希望实现以下目标:Scala:模式匹配多个选项参数,scala,pattern-matching,Scala,Pattern Matching,我希望实现以下目标: private def msgPrefix(implicit myClass: MyClass, anotherClass: AnotherClass) = { Option(myClass, anotherClass) match { case Some(validMyClass, validAnotherClass) => validMyClass.process + validAnotherClass.process
private def msgPrefix(implicit myClass: MyClass, anotherClass: AnotherClass) = {
Option(myClass, anotherClass) match {
case Some(validMyClass, validAnotherClass) => validMyClass.process + validAnotherClass.process
case _ => ""
}
}
做这件事的正确方法是什么?我不确定我是否理解您在寻找什么,但是:
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]
(如果可以)。我不确定我是否理解您在寻找什么,但是:
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
但是您可能应该将参数的类型更改为
选项[MyClass]
和选项[AnotherClass]
(如果可以)。我同意Marth的观点,您的参数应该是选项[MyClass]
和选项[AnotherClass]
。但要回答您最初的问题,您可以使用a来进行理解,而不是模式匹配:
private def msgPrefix(implicit myClass: MyClass, anotherClass: AnotherClass) = {
val prefix = for {
validMyClass <- Option(myClass)
validAnotherClass <- Option(anotherClass)
} yield validMyClass.process + validAnotherClass.process
prefix.getOrElse("")
}
private def msgPrefix(隐式myClass:myClass,anotherClass:anotherClass)={
val前缀=用于{
validMyClass我同意Marth的观点,您的论点可能应该是选项[MyClass]
和选项[AnotherClass]
。但要回答您最初的问题,您可以使用a进行理解,而不是模式匹配:
private def msgPrefix(implicit myClass: MyClass, anotherClass: AnotherClass) = {
val prefix = for {
validMyClass <- Option(myClass)
validAnotherClass <- Option(anotherClass)
} yield validMyClass.process + validAnotherClass.process
prefix.getOrElse("")
}
private def msgPrefix(隐式myClass:myClass,anotherClass:anotherClass)={
val前缀=用于{
validMyClass我真的很喜欢这个解决方案,但我接受了@Marth answer,因为这正是我想要的。我真的很喜欢这个解决方案,但我接受了@Marth answer,因为这正是我想要的。