为什么我不能在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) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |