gpt4 book ai didi

Scala 设置匹配案例

转载 作者:行者123 更新时间:2023-12-01 07:26:37 25 4
gpt4 key购买 nike

我正在学习 Scala,作为最好的培训,我将旧的 Java 算法转换为函数式编程风格。我有以下代码:

def test(originalSet: Set[Int]):Boolean = originalSet match {
case Set() => true
case x::y => false
}

此代码适用于列表,但对于集合,它给了我以下编译错误:
  - value Set is not a case class constructor, nor does it have an unapply/unapplySeq 
method


- constructor cannot be instantiated to expected type; found : scala.collection.immutable.::[B] required: 
scala.collection.immutable.Set[Int]
- constructor cannot be instantiated to expected type; found : scala.collection.immutable.::[B] required:
scala.collection.immutable.Set[Int]

问题是什么?如何测试 Set 为空的情况?当 set 有头部和尾部时,我如何才能解决另一种情况?

最佳答案

Set定义一个 isEmpty方法所以最简单的解决方案是

def test(originalSet: Set[Int]): Boolean = originalSet.isEmpty

当您使用匹配列表时
list match {
case Nil => true
case x :: y => false
}

您正在匹配列表 Nil反对和反对 ::类,即它相当于
list match {
case Nil => true
case ::(x, y) => false
}

所以你不能在 Set 上使用这个表格.

当您使用以下方法对列表进行模式匹配时:
list match {
case List(a, b) => true
case _ => false
}

您正在使用列表提取器。 List提取器是使用 unapplySeq 定义的如果列表具有给定格式,则匹配。 Set没有定义 unapplyunapplySeq方法,所以你也不能用这种方式匹配它。

关于Scala 设置匹配案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18688044/

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