Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:模式匹配多个选项参数_Scala_Pattern Matching - Fatal编程技术网

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,因为这正是我想要的。