-
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
相关推荐
第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7页 第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与...
Chapter 4: Lazy sequences – Being Lazy, Being Good Chapter 5: Taming Multiple Inheritance with Traits Chapter 6: Currying Favors with Your Code Chapter 7: Of Visitors and Chains of Responsibilities ...
Key Features Get the first book to ... and eager and lazy collections Explore event sourcing to improve performance while working with stream processing pipelines Dive into asynchronous programming
第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7页 第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与...
第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7页 第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与...
第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7页 第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与...
第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7页 第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与...
第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7页 第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与...
第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7页 第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与...
第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7页 第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与...
《快学Scala》英文第二版: Scala for the Impatient Second Edition Cay S. Horstmann 目录: 1 THE BASICS A1 1 1.1 The Scala Interpreter 1 1.2 Declaring Values and Variables 4 1.3 Commonly Used Types 5 ...
Scala递归地图 Scala实用程序以递归方式遍历和转换JSON,如由列表和地图构成的树形结构 安装 没有Maven文物发布的喷气机。 添加此项目的一种方法是将直接依赖项添加到构建文件中的github存储库中 build.sbt: lazy ...
lazy val backwards : Seq [ ModuleID ] = { val version = " 1.0.8 " Seq ( " com.github.backwards-limited " % " scala-backwards " % version % " test, it " classifier " tests " , " ...
用法将以下行添加到您的sbt设置中: libraryDependencies + = " org.scala-js " %%% " scalajs-java-time " % " 1.0.0 " 如果您有crossProject ,那么该设置只能在JS部分中使用: lazy val myCross = crossProject ....
scala2ts-core 将您的Scala类,对象和特征转换为Typescript接口和类 该存储库包含scala2ts项目的解析器,编译器和渲染器...lazy val yourProject = (project in file( " . " )) .settings( autoCompilerPlug
GenJavadoc 该项目的目标是为Scala项目创建真正的Javadoc。 尽管Scaladoc(Scala的本机API文档格式)相对于Javadoc具有多个优点,但Java程序员非常习惯于以与其所选编程语言... lazy val Javadoc = config( " genjavad
Scala-java-locales scala-java-locales是JDK8上定义的java.util.Locale API和相关类的无尘室BSD许可... lazy val myCross = crossProject. ... .jsSettings( libraryDependencies + = " io.github.cquiroz " %%%
Scala是如何看待编程和其中的问题的。Scala的目标,Scala的手段,Scala的效果。 能在编译期做的约束和检查,就不要延迟到运行时。例如,ADT Scala warm-up: Keywords or tags 列表解析式 函数一等公民 鸭子类型 尾...
Domala是Scala的数据库访问库。 这包装了 。 Domala使用生成代码并在编译时验证sql映射。 Select语句由您自己编写。 它被自动映射到Option[ Entity ] , Seq[ Entity ] , Stream[ Entity ] , Seq[Map[String, ...