Scala-Lazy

在Scala中,提供了lazy值的特性,也就是说,如果将一个变量声明为lazy,则只有在第一次使用该变量时,变量对应的表达式才会发生计算。这种特性对于特别耗时的计算操作特别有用,比如打开文件进行IO,进行网络IO等。

scala> import scala.io.Source._
import scala.io.Source._

scala> lazy val lines = fromFile("C:\\Users\\Administrator\\Desktop\\test.txt").mkString
lines: String = <lazy>

scala> println(lines)
def sayHello(name:String,age:Int)={
if(age >18){
printf("Hi , %s , you are big boy !!!",name)
age
}else{
printf("Hi , %s , you are little boy !!!",name)
age
}
}

scala> lazy val lines = fromFile("C:\\Users\\Administrator\\Desktop\\test2222.txt").mkString
lines: String = <lazy>

scala> println(lines)
java.io.FileNotFoundException: C:\Users\Administrator\Desktop\test2222.txt (系统找不到指定的文件。)
  at java.io.FileInputStream.open0(Native Method)
  at java.io.FileInputStream.open(FileInputStream.java:195)
  at java.io.FileInputStream.<init>(FileInputStream.java:138)
  at scala.io.Source$.fromFile(Source.scala:91)
  at scala.io.Source$.fromFile(Source.scala:76)
  at scala.io.Source$.fromFile(Source.scala:54)
  at .lines$lzycompute(<console>:16)
  at .lines(<console>:16)
  ... 33 elided

scala> val lines = fromFile("C:\\Users\\Administrator\\Desktop\\test2222.txt").mkString
java.io.FileNotFoundException: C:\Users\Administrator\Desktop\test2222.txt (系统找不到指定的文件。)
  at java.io.FileInputStream.open0(Native Method)
  at java.io.FileInputStream.open(FileInputStream.java:195)
  at java.io.FileInputStream.<init>(FileInputStream.java:138)
  at scala.io.Source$.fromFile(Source.scala:91)
  at scala.io.Source$.fromFile(Source.scala:76)
  at scala.io.Source$.fromFile(Source.scala:54)
  ... 33 elided

scala>

  

时间: 2025-01-14 18:44:03

Scala-Lazy的相关文章

scala def/val/lazy val区别以及call-by-name和call-by-value

scala 学习 参考链接:https://blog.csdn.net/qq_29343201/article/details/56281777 关于def/val/lazy val def def类似于每一次重新赋值,如果是用def定义函数,则是每一次重新获得一个函数 val 获得一次,并立即执行(严格执行) lazy val 惰性执行,也就是赋值(绑定)的时候先不会执行,等到需要的时候再执行 实验 scala> def f = {println("hello"); 1.0}

大数据Spark学习:Scala基础第一课

计划: 阶段1: 精通Spark内核 阶段2: 精通千万级的项目 阶段3: 机器学习 JAVA本身不是伟大的语言,伟大的是JVM,构件分布式平台什么的,依赖的是JVM,不一定要JAVA语言 可认为Scala是JAVA的升级语言,JAVA是支持面向对象的语言,而非纯面向对象的语言.Scala是一切皆对象, 是纯面向对象语言.面向对象结合函数式编程. 不可变变量声明val result = 10+2  不可再次赋值,分布式数据的时候,传输数据.校验数据等不想改变这个数据 可变变量var name =

Scala入门到精通——第一节 Scala语言初步

本节主要内容 Scala简介 为什么要学习Scala Scala语言初步 1. Scala简介 Scala(Scala Language的简称)语言是一种能够运行于JVM和.Net平台之上的通用编程语言,既可用于大规模应用程序开发,也可用于脚本编程,它由由Martin Odersk于2001开发,2004年开始程序运行在JVM与.Net平台之上,由于其简洁.优雅.类型安全的编程模式而受到关注. Scala的创建者--Martin Odersk 在Scala的创建之初,并没有怎么引起重视,随着Ap

Scala的数据类型和基础语法

 lang 2.1.     和Java的异同 2.1.1.  语法 Java++:增加的语法 Java--:删减的语法 纯OO 静态成员 操作符重载 原生数据类型 closure break.continue 使用trait进行mixin组合 接口 existential type(_) 通配符List<?>, import pkg.*; 抽象类型 (type T) class C1[T] {...} 原始类型 class C1<T> {...} 模式匹配 enum枚举 注:

Scala笔记整理(一):scala基本知识

[TOC] Scala简介 Scala是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. Scala运行在Java虚拟机上,并兼容现有的Java程序. Scala源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库. 函数编程范式更适合用于Map/Reduce和大数据模型,它摒弃了数据与状态的计算模型,着眼于函数本身,而非执行的过程的数据和状态的处理.函数范式逻辑清晰.简单,非常适合用于处理基于不变数据的

Scala笔记(1)——基本知识

Scala与Java的关系 1.都是基于JVM虚拟机运行的 Scala编译之后的文件也是.class,都要转换为字节码,然后运行在JVM虚拟机之上. 2.Scala和Java相互调用 在Scala中可以直接调用Java的代码,同时在Java中也可以直接调用Scala的代码 3.Java8 VS Scala 1)Java8(lambda)没有出来之前,Java只是面向对象的一门语言,但是Java8出来以后,Java就是一个面向对象和面向函数的混合语言了. 2)首先我们要对Scala进行精确定位,从

Scala - 03 - 基础语法

1- 变量 变量 mutable variable 在程序运行过程中其值可能发生改变的量 关键词var定义变量,定义时直接进行求值 常量 immutable variable 在程序运行过程中其值不会发生变化的量 在声明时就必须被初始化,而且一旦初始化后就不能再赋值: 关键词val定义常量,定义时直接进行求值: 关键词lazy val --- 惰性求值的常量,只有当该变量第一次被使用时才会被求值 常量不能修改.如果程序尝试修改常量的值,将会在编译时报错 变量类型引用 可以不显示指定变量的类型,S

【scala】2.控制结构和函数

简介 在Java或者C++中,我们把表达式和语句看做两种不同的东西.表达式有值,而语句执行动作. 在Scala中,几乎所有构造出来的语法结构都是有值的.这个特性使得程序更加的精简,也更易读. 1.条件表达式 scala> val x = 1 x: Int = 1 scala> val res = if(x == 1) 1 else 0 res: Int = 1 scala> var res = if(x == 1) "hello" else 3 res: Any =

Scala编程之惰性函数

一.为什么需要惰性函数 惰性计算(尽可能延迟表达式求值)是许多函数式编程语言的特性.惰性集合在需要时提供其元素,无需预先计算它们,这带来了一些好处.首先,您可以将耗时的计算推迟到绝对需要的时候.其次,您可以创造无限个集合,只要它们继续收到请求,就会继续提供元素.函数的惰性使用让您能够得到更高效的代码.Java并没有为惰性提供原生支持, Scala提供了,使用很方便. 二.java实现懒加载 懒汉式 public class LazyDemo { private String property;

Scala学习 -- 基础语法

一.变量 1.三种变量修饰符 val 定义 immutable variable(不修改 常量) var 定义 immutable variable(可修改 变量)   lazy val (惰性赋值的常量):不直接算出结果,在系统第一次调用 lazy val 的时候计算结果 scala> val d = 12 d: Int = 12 scala> val e = 20 e: Int = 20 scala> lazy val f = d * e f: Int = <lazy>