scala - 为什么我不能在 Scala 中对 Stream.empty 进行模式匹配?

标签 scala pattern-matching

如果我取消注释指示的行,下面的代码将无法编译。编译器提示:“需要稳定的标识符”。

val Empty = Stream.empty    
val a = Stream.range(0, 5)
a match {
  // case Stream.empty => println("nope") <-- does not work
  case Empty => println("compiles") <-- works
  case _ => println("ok")
}

如果我分配 Stream.empty值(value) Empty首先,它可以工作,但感觉很奇怪,如果没有这样的 hack,你就无法在这样一个基本值上进行模式匹配。

我错过了什么吗?

最佳答案

您无法在 Stream.empty 上进行模式匹配因为它是 方法 (在对象 Stream 中)总是返回空流(但编译器不知道)。

而不是分配 val empty = Stream.empty , 您可以在 Stream.Empty 上匹配,这是一个 Object :

scala> a match {
           case Stream.Empty => println("done")
           case h #:: tl => println(h)
       }

关于scala - 为什么我不能在 Scala 中对 Stream.empty 进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28530794/

相关文章:

iterator - 如何在 vec 上映射并在 Rust 中使用带有模式匹配的闭包

用于从字符串接收整数的 C# 模式创建

scala - 凿子中的 != 和 =/= 有什么区别?

scala - 模式匹配和无限流

scala - 在 Scala 中回归 future 的 future

java - 模式没有给出正确的结果

parsing - 从 Scala 字符串中去除 HTML 标签

scala - 创建 SBT 项目后,IDEA 15 无法解析 build.sbt

scala - 如何使用spark(scala)在文件名上应用模式匹配

scala - 为什么需要模式匹配来保存存在类型信息?