scala学习笔记-过程、lazy值和异常(6)

过程

在Scala中,定义函数时,如果函数体直接包裹在了花括号里面,而没有使用=连接,则函数的返回值类型就是Unit。这样的函数就被称之为过程。过程通常用于不需要返回值的函数。 过程还有一种写法,就是将函数的返回值类型定义为Unit。

1 def sayHello(name: String) = "Hello, " + name
2 def sayHello(name: String) { print("Hello, " + name); "Hello, " + name }
3 def sayHello(name: String): Unit = "Hello, " + name

lazy值

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

1 import scala.io.Source._
2 lazy val lines = fromFile("C://Users//Administrator//Desktop//test.txt").mkString

即使文件不存在,也不会报错,只有第一个使用变量时会报错,证明了表达式计算的lazy特性。

1 val lines = fromFile("C://Users//Administrator//Desktop//test.txt").mkString
2 lazy val lines = fromFile("C://Users//Administrator//Desktop//test.txt").mkString
3 def lines = fromFile("C://Users//Administrator//Desktop//test.txt").mkString

异常

 1 在Scala中,异常处理和捕获机制与Java是非常相似的。
 2
 3 try {
 4   throw new IllegalArgumentException("x should not be negative")
 5 } catch {
 6   case _: IllegalArgumentException => println("Illegal Argument!")
 7 } finally {
 8   print("release resources!")
 9 }
10
11 try {
12   throw new IOException("user defined exception")
13 } catch {
14   case e1: IllegalArgumentException => println("illegal argument")
15   case e2: IOException => println("io exception")
16 }
时间: 2024-08-21 19:05:47

scala学习笔记-过程、lazy值和异常(6)的相关文章

Scala学习笔记及与Java不同之处总结-从Java开发者角度

Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.以下列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码演示样例及具体阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接. 语句能够不用";"结束.且推荐不适用";". 变量声明时以var或va

Scala学习笔记及与Java不同之处总结-从Java开发人员角度

Scala与Java具有许多相似之处,但又有许多不同.这里主要从一个Java开发人员的角度,总结在使用Scala的过程中所面临的一些思维转变.这里只是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.下面列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码示例及详细阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接: 语句可以不用";"结束,且推荐不适用";": 变量声明时以var或val开头

原创:Scala学习笔记(不断更新)

Scala是一种函数式语言和面向对象语言结合的新语言,本笔记中就零散记下学习scala的一些心得,主要侧重函数式编程方面. 1. 以递归为核心控制结构. 实现循环处理的方式有三种:goto,for/while,递归,其中用goto实现循环已经在现代语言中被放弃,而for/while形式的结构化编程成为主流,而递归作为另一种方案,则长期只流行在函数式编程的小圈子中. 递归被主流编程界所担心的主要是过深的调用栈,甚至以前的课堂上我们还亲自尝试过将递归改写为循环,但是现代函数式编程语言中,通过尾递归(

lua学习笔记之类型和值

Lua学习笔记之类型和值 1.全局变量 全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil 如果需要删除一个全局变量,只需要将变量赋值为nil 2.词法约定 标识符:字母或者下划线开头的字母.下划线.数字序列,最好不要使用下划线家大写字母的标识符,因为lua的保留字也是这样的. 3.命令行方式 Lua[options][script[args]] -e:直接将命令传入lua Prompt>lua –e "print(

《深入Java虚拟机学习笔记》- 第17章 异常

<深入Java虚拟机学习笔记>- 第17章 异常

Scala学习笔记一之基础语法,条件控制,循环控制,函数,数组,集合

前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: 1:声明val变量:可以使用val来声明变量,用来存放表达式的计算结果,但是常量声明后是无法改变它的值的,建议使用val来声明常量: 声明var变量:如果要声明可以改变的引用,可以使用var变量,声明的常量的值可以改变. 3:指定类型:无论声明val变量还是声明var变量.都可以手动指定其类型,如果不指定,scala会自动根据值,进行类型

scala学习笔记(四)样本类与模式匹配

访问修饰符 格式:private[x]或protected[x],x指某个所属包.类或单例对象,表示被修饰的类(或方法.单例对象),在X域中公开,在x域范围内都可以访问: private[包名]:在该包名作用域内,被修饰域都能被访问: private[类名]:在该类的作用域,被修饰域都能被访问: private[this]:仅能在包含了定义的同一对象中访问,用于保证同一类中不能被其它对象访问: 例子: package tests{     private[tests] class Test{  

Scala学习笔记-环境搭建以及简单语法

关于环境的搭建,去官网下载JDK8和Scala的IDE就可以了,Scala的IDE是基于Eclipse的. 下面直接上代码: 这是项目目录: A是scala写的: package first import scala.collection.mutable.ListBuffer object A { def main(args: Array[String]) { print("Hello,Scala");//学习程序设计的第一句 println("---");//pr

Scala学习笔记(三)

无参方法 功能:将方法的定义转换为属性字段的定义: 作用范围:方法中没有参数,并且方法仅能通过读取所包含的对象属性去访问可变状态,而不改变可变状态,就可使用无参方法: 例子: abstract class Element{     def texts:String } class Sub1Element(text:String) extends Element{     val texts:String = text } object RunApplication{     def main(a