是否有任何有效的方法可以删除以下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
。
答案 0 :(得分:0)
MyCurerncy(Option(Currency.A))
的类型为MyCurerncy
。
None
的类型为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
}