Scala选项:映射与模式匹配
发布时间:2020-12-16 19:03:44 所属栏目:安全 来源:网络整理
导读:在 Scala中处理选项时,我应该考虑哪些事项来决??定是否映射或拍照?例如,如果我有Option [MyClass],我可以通过以下方式处理它: def getList(myOptionInstance: Option[MyClass]): List[String] = myOptionInstance map (...) getOrElse(List.empty[String])
在
Scala中处理选项时,我应该考虑哪些事项来决??定是否映射或拍照?例如,如果我有Option [MyClass],我可以通过以下方式处理它:
def getList(myOptionInstance: Option[MyClass]): List[String] = myOptionInstance map (...) getOrElse(List.empty[String]) 要么 def getList(myOptionInstance: Option[MyClass]): List[String] = myOptionInstance match { case Some(mySomeInstance) => ..... case None => List.empty[String] } 我什么时候可以选择一个呢? 解决方法
我第二次@rarry:fold是处理这个的首选方式.
有些人喜欢模式匹配,因为它是“酷”(无论什么意思),有时更容易阅读. 我尝试避免使用getOrElse,因为它不会强制您使用与您的Option中包含的类型默认值相同的类型: def getOrElse[B >: A](default: ? B): B 所以你可以写: val v = Some(42).getOrElse("FortyTwo") 这里v有类型Any.很容易看到这样一个愚蠢的例子的问题,但有时它不是很明显,可能会导致问题. 折叠时 def fold[B](ifEmpty: ? B)(f: (A) ? B): B 它强制您为两个分支返回相同的类型. scala> Some(42).fold("fortyTwo")(v => v) <console>:8: error: type mismatch; found : Int required: String Some(42).fold("fortyTwo")(v => v) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |