加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么我不能在Scala中的Stream.empty上进行模式匹配?

发布时间:2020-12-16 09:21:52 所属栏目:安全 来源:网络整理
导读:如果我取消注释所示的行,下面的代码不会编译.编译器抱怨:“需要稳定的标识符”. 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
如果我取消注释所示的行,下面的代码不会编译.编译器抱怨:“需要稳定的标识符”.

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赋值为空,那么它的工作原理很好,但是如果没有这样的一个黑客,就无法在这样一个基本的值上匹配模式.

我错过了什么吗?

解决方法

您不能在Stream.empty上进行模式匹配,因为它是一种始终返回空流(但编译器不知道)的方法(在对象流中).

而不是分配val empty = Stream.empty(你的’hack’),你可以匹配Stream.Empty,它是一个对象:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读