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

scala – 在自己的定义中使用的变量?

发布时间:2020-12-16 09:01:26 所属栏目:安全 来源:网络整理
导读:无限流: val:Stream [Int] = Stream.cons(1,ones) 如何在自己的声明中使用一个值?似乎这应该会产生编译器错误,但它可以工作. 解决方法 它并不总是递归的定义.这实际上可以产生1: val a : Int = a + 1println(a) 当您输入val a:Int时,会创建变量a,因此您
无限流:

val:Stream [Int] = Stream.cons(1,ones)

如何在自己的声明中使用一个值?似乎这应该会产生编译器错误,但它可以工作.

解决方法

它并不总是递归的定义.这实际上可以产生1:

val a : Int = a + 1
println(a)

当您输入val a:Int时,会创建变量a,因此您可以在定义中使用它. Int默认初始化为0.一个类将为null.

@Chris指出,Stream接受=> Stream [A]所以应用了另一个规则,但是我想解释一般情况.这个想法仍然是一样的,但变量是通过名称传递的,所以这使得计算递归.鉴于它是通过名称传递的,它被执行为懒惰. Stream一个接一个地计算每个元素,所以每当它需要下一个元素时,它调用它们,导致再次产生相同的元素.这样做:

val ones: Stream[Int] = Stream.cons(1,ones)
println((ones take 10).toList) // List(1,1,1)

虽然你可以使无限流更容易:Stream.continually(1)更新as @SethTisue在注释中指出Stream.continually和Stream.cons是两种完全不同的方法,结果非常不同,因为cons持续需要=&gt ; A,这意味着每次元素不断重新计算,并将其存储在内存中,当cons可以避免存储n次,除非将其转换为其他结构,如List.只有当您需要生成不同的值时,才能持续使用.有关详细信息和示例,请参阅@SethTisue注释.

但请注意,您需要指定类型,与递归函数相同.

你可以使第一个示例递归:

lazy val b: Int = b + 1
println(b)

这将stackoverflow.

(编辑:李大同)

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

    推荐文章
      热点阅读