Scala学习笔记-控制结构和函数(2)
来源:互联网 发布:java工程师所属部门 编辑:程序博客网 时间:2024/06/11 00:04
7.函数
scala除了方法外还支持函数。方法对对象进行操作,函数不是。
要定义函数,需要给出函数名、参数和函数体,例如:
def abs (x: Double) =if(x >= 0) x else -x
只要函数不是递归的,一般不需要指定返回类型。scala编译器可以通过= 符号右侧的表达式的类型推断出返回类型
如果函数体需要多个表达式完成,可以用代码块。块中最后一个表达式的值就是函数的返回值。例如:
def fac(n:Int)={
var r=1
for(i<-1 to n) r=r*i
r
}
对于递归函数,必须指定返回值类型。例如:
def fac(n:Int): Int= if(n<=0) 1 else n*fac(n-1)
如果没有返回值类型,scala编译器无法教育n*fac(n-1)的类型是Int
8. 默认参数和带名参数
在调用某些函数时并不显式地给出所有参数值,对于这些函数可以使用默认参数。例如:
def decorate(str: String, left :String = "[", right: String=" ]")= left+str+right
这里 left和right带有默认值,如果你不喜欢默认值,也可以给出自己的left 和right
9. 变长参数
例如:
def sum(args :Int*)={
var result=0;
for(arg<-args) result+=arg
result
}
可以使用任意多个参数来调用该函数,例如 val s=sum(1,4,7,9)
如果你已经有一个值的序列,则不能直接将它传染上述函数,例如: val s=sum(1 to 5) //错误
如果sum函数被调用时传入的是单个参数,那么该参数必须是单个整数,而不是一个整数区间。解决办法如下:
val s =sum( 1 to 5:_*) //将1 to 5 当做参数序列处理
10. 过程
scala对于不返回值的函数有特殊的表示法。如果函数体包含在花括号当中但没有前面的=号,那么返回类型就是Unit。这样的函数被称作过程。过程不返回值,调用它仅为了它的副作用。
11. 懒值
当val被声明为lazy时,它的初始化将被推迟,直到首次对它进行取值。例如:
lazy val words=scala.io.Source.fromFile("c:\\words").mkString
如果不访问words,那么文件不会被打开。懒值对于开销较大的初始化语句是否有用
可以把懒值当做是介于val 和def 的中间状态。例如:
12.异常
scala异常的工作机制与Java一样。当你抛出异常时,和Java一样,抛出的对象必须是Java.lang.Throwable的子类。不过,Scala没有“受检”异常---你不需要声明说函数或者方法可能抛出的某种异常。
throw表达式有特殊的类型Nothing。这在if/else表达式中很有用。如果一个分支的类型是Nothing,那么if/else表达式的类型就是另一个分支的类型。例如:
if(x>=0) { sqrt(X)} else throw new Exception("x should not be negative")
第一个分支类型是Double,第二个分值类型是Nothing,因此if/else表达式的类型就是Double
- Scala学习笔记2 - 控制结构和函数
- Scala学习笔记-控制结构和函数(2)
- Scala的数据类型、对象、控制结构、函数和闭包---Scala学习笔记(2)
- Scala学习笔记-控制结构和函数(1)
- Scala学习(二)--- 控制结构和函数
- Scala学习笔记-控制结构
- Scala 控制结构和函数
- 快学Scala第2章–控制结构和函数 笔记
- Scala学习笔记--第2章 控制结构
- 《快学Scala》 第2章 控制结构和函数
- 快学Scala第2章--控制结构和函数
- 快学Scala(2) 控制结构和函数
- [scala之二]控制结构和函数
- Scala详解---------控制结构和函数
- Scala详解-----------控制结构和函数
- scala之控制结构和函数
- scala学习第二章 控制结构与函数
- Scala坑二(控制结构和函数)
- Vue 常用API整理 1
- 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】
- Int类型的集合类的设计实现
- 批量单变量求解 office wps 单变量求解比较
- 两两交换链表中的节点-LintCode
- Scala学习笔记-控制结构和函数(2)
- 171015chrony时间同步
- USB相关知识
- 一 python 运算符
- 【ViSP 3.1.0 main page】
- 解读zookeeper的配置项
- Mysql 访问控制2 Request Verification
- VC2010项目中附加包含目录
- 到底vuex是什么