簡體   English   中英

Scala:模式匹配多個Option參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM