[英]Scala: Pattern match multiple Option arguments
我想實現以下目標:
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 _ => ""
}
}
如果兩個參數中的至少一個為null,則將返回空String,即:
scala> msgPrefix(MyClass("foo"),null)
res2: String = ""
scala> msgPrefix(MyClass("foo"),AnotherClass("bar"))
res3: String = foobar
但是您可能應該只將參數的類型更改為Option[MyClass]
和Option[AnotherClass]
(如果可以)。
我同意Marth的觀點,您的論點可能應該是Option[MyClass]
和Option[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("")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.