选中可选字段以填充另一个字段

时间:2017-09-14 05:00:39

标签: scala

是否有任何有效的方法可以删除以下if和else条件

object Currency {

  sealed trait MyConstants extends MyTrait[String]
  case object A extends MyConstants {val value ="abc"}
  case object B extends MyConstants {val value = "def"}

}

case class Test(name:String)
case class MyCurerncy(currency: Option[MyConstants])
 def check (name:String):Option[Test] ={.....}
 if(check("xyz").isDefined){
    MyCurerncy(Option(Currency.A))
 }else{
    None
 }

方法检查返回Option[Test]。如果定义了Test,我需要根据条件填充MyCurrency

1 个答案:

答案 0 :(得分:0)

MyCurerncy(Option(Currency.A))的类型为MyCurerncyNone的类型为Option[Nothing]。 所以

 if(check("xyz").isDefined){
    MyCurerncy(Option(Currency.A))
 }else{
    None
 }

的类型为Any(实际上Product with Serializable,但无关紧要)。您确定要更加Any吗?

如果您希望MyCurerncy,即

 if(check("xyz").isDefined){
    MyCurerncy(Option(Currency.A))
 }else{
    MyCurerncy(None)
 } 

你可以写

MyCurerncy(check("xyz").flatMap(_ => Option(Currency.A)))

如果你不喜欢任何你可以写你写的或匹配

  check("xyz") match {
    case Some(_) => MyCurerncy(Option(Currency.A))
    case None => None
  }