gpt4 book ai didi

scala - 如何使用模式匹配检查列表是否包含全部 Some 或 None 或两者?

转载 作者:行者123 更新时间:2023-12-02 05:49:40 24 4
gpt4 key购买 nike

有一个类型为List[Option[String]]的列表,它可能包含SomeNone

val list:List[Option[String]] = List(Some("aaa"), None, Some("bbb"))
list match {
case /*List with all Some*/ => println("all items are Some")
case /*List with all None*/ => println("all items are None")
case /*List with Some and None*/ => println("Contain both Some and None")
}

但是我不知道怎么写。是否可以使用模式匹配?

最佳答案

您可以编写自定义提取器:

object AllSome {
def unapply[T](l: List[Option[T]]) = l.forall(_.isDefined)
}

object AllNone {
def unapply[T](l: List[Option[T]]) = l.forall(_ == None)
}

object Mixed {
def unapply[T](l: List[Option[T]]) = !AllNone.unapply(l) && !AllSome.unapply(l)
}

并像这样使用它们:

list match {
case AllSome() => ???
case AllNone() => ???
case Mixed() => ???
}

关于scala - 如何使用模式匹配检查列表是否包含全部 Some 或 None 或两者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531480/

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