如果我取消注释指示的行,下面的代码将无法编译。编译器提示:“需要稳定的标识符”。
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/