scala – Stream何时需要懒惰?
发布时间:2020-12-16 09:10:53 所属栏目:安全 来源:网络整理
导读:以下是为了创建一个整数流: val s: Stream[Int] = 1 #:: s.map(_ + 1)def makeStream = { val s: Stream[Int] = 1 #:: s.map(_ + 1) s} 第一个是好的但是,makeStream方法不会编译: error: forward reference extends over definition of value s val s: St
以下是为了创建一个整数流:
val s: Stream[Int] = 1 #:: s.map(_ + 1) def makeStream = { val s: Stream[Int] = 1 #:: s.map(_ + 1) s } 第一个是好的但是,makeStream方法不会编译: error: forward reference extends over definition of value s val s: Stream[Int] = 1 #:: s.map(_ + 1) ^ 如果我们做一个懒惰的话,它只会编译.为什么在方法中需要一个懒惰的价值,但不在外面? 解决方法
在一个类中,val定义反编译为引用隐藏类字段的“getter”方法.这些“getter”方法可以是自引用的(或者,类初始化程序可以引用“getter”),因为这是Java方法的语义.请注意,val的“外部”定义实际上由REPL包装在一个隐藏的类中(这是REPL规避了val不能在顶级声明的限制).
在一个方法中,val定义不会反编译为“getter”方法,而是转换为在堆栈上生成值所必需的字节码.另一方面,一个懒惰的人总是需要一种“吸气者”的方法,因为这样可以是自我参照的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |