gpt4 book ai didi

Scala 选项 : map vs Pattern Matching

转载 作者:行者123 更新时间:2023-12-01 06:05:28 26 4
gpt4 key购买 nike

同时处理Option在 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 .用这样一个愚蠢的例子很容易看出问题,但有时它并不那么明显,可能会导致问题。

虽然 fold :
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)

关于Scala 选项 : map vs Pattern Matching,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21923600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com