-
scala lazy的问题。5
初学scala,遇到一个lazy的问题。
scala> def repeat [T] (x : T) : List[T] = x :: (repeat (x))
scala> repeat (0) take (3)
结果堆栈溢出。
请问这个如何能处理为lazy的呢?
问题补充:邮件列表给出的答案是Stream类……
为什么scala不是默认lazy的呢……2010年1月27日 11:31
2个答案 按时间排序 按投票排序
-
night_stalker 写道
val x = 12 lazy val repeat : List[Int] = x :: repeat
楼主要的不是那个意义上的lazy,而是跟Haskell一样的lazy evaluation,也就是说即便是无限表也有办法让某些运算能终结。
这样的话就应该自己写一个LazyList[T]类型,让它每到访问某个节点的时候才去计算其中的值。用内建的List[T]类型是做不到的,一对它求值它就会试图把整个表的值都先填上。
其实C#也能搞出类似效果的东西:using System; using System.Collections.Generic; using System.Linq; static class Program { static IEnumerable<T> Repeat<T>(T value) { while (true) { yield return value; } } static void Main(string[] args) { var repeat5 = Repeat(5); foreach (var n in repeat5.Take(3)) { Console.WriteLine(n); } } }
也就是——作弊。
C#里的IEnumerable<T>就表示了一类lazy sequence,于是即便在这么一种strict evaluation order的语言里也照样可以无限repeat...2010年1月29日 11:05
-
scala 中只有 val 才允许 lazy。所以不能用泛型。
val x = 12 lazy val repeat : List[Int] = x :: repeat
生搬 java 泛型真的很尴尬 …… 在 haskell 中很容易做的事情都变得很困难。2010年1月29日 10:18
相关推荐
在深入探讨Scala编程的各个层面时,我们重点关注函数、过程、lazy值和异常处理这些核心概念。 首先,函数是Scala编程的基础元素之一。函数可以用来封装可重用的代码块,并可能返回一个值。当我们定义一个函数,如果...
### Scala基础学习知识点 #### 一、Scala简介 Scala是一种多范式的编程语言,它集成了面向对象编程和函数式编程的特点。...无论是初学者还是有经验的开发者,Scala都能提供一种新的编程视角,帮助解决实际问题。
此外,Scala还引入了惰性求值(Lazy Evaluation)和不可变数据结构,这些特性在函数式编程中非常重要,因为它们可以提高性能并保证状态的纯净。 在函数式编程方面,资料可能涵盖函数组合、柯里化(Currying)、高阶...
- **懒值**:Scala 支持懒加载(Lazy Evaluation),可以在需要时才计算某个表达式的值。 - **异常处理**:Scala 提供了与 Java 类似的异常处理机制。 #### 六、数据结构 - **主要的集合特质**:Scala 提供了丰富...
9. **延迟初始化**:Scala提供了延迟初始化(lazy)特性,确保一个变量只在首次使用时才被初始化,这对于节省资源和提高性能很有帮助。 10. **交互式编程**:Scala可以配合REPL(Read-Eval-Print Loop)进行交互式...
private lazy val component = new Component def getComponent(): Component = component } // 使用 val delayedComponent = new DelayedComponent() delayedComponent.getComponent() // 第一次调用时初始化 ...
函数入门之变长参数第8讲-Scala编程:函数入门之过程、lazy值和异常第9讲-Scala编程:数组操作之Array、ArrayBuffer以及遍历数组第10讲-Scala编程:数组操作之数组转换第11讲-Scala编程:Map与Tuple第12讲-Scala编程...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
在函数式编程方面,Scala拥有强大的函数式编程能力,比如高阶函数(higher-order functions)、不可变性(immutability)、惰性求值(lazy evaluation)和强大的类型推断(type inference)。这些特性让Scala成为...