2013-11-22 5 views
0

Я хотел бы, чтобы добиться чего-то вроде следующего:Scala: сопоставление с образцом несколько аргументов Option

private def msgPrefix(implicit myClass: MyClass, anotherClass: AnotherClass) = {   
    Option(myClass, anotherClass) match { 
     case Some(validMyClass, validAnotherClass) => validMyClass.process + validAnotherClass.process 
     case _  => "" 
    } 
    } 

Что такое правильный способ сделать это?

ответ

3

Я не уверен, что я понял, что вы ищете, но:

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] (если можете).

2

Я согласен с Мартом, что ваши аргументы, вероятно, должны быть Option[MyClass] и Option[AnotherClass]. Но чтобы ответить на ваш первоначальный вопрос, вы можете использовать его для понимания, а не для сопоставления с образцом:

+0

Мне очень нравится это решение, но я принял ответ @Marth, поскольку именно это я и искал. – Prasanna

Смежные вопросы