scala – 在自己的定义中使用的变量?
无限流:
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持续需要=> ; A,这意味着每次元素不断重新计算,并将其存储在内存中,当cons可以避免存储n次,除非将其转换为其他结构,如List.只有当您需要生成不同的值时,才能持续使用.有关详细信息和示例,请参阅@SethTisue注释. 但请注意,您需要指定类型,与递归函数相同. 你可以使第一个示例递归: lazy val b: Int = b + 1 println(b) 这将stackoverflow. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |