Scala 基础知识
Posted 微数营
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala 基础知识相关的知识,希望对你有一定的参考价值。
5. 函数
函数是一段可执行的代码,这段代码最终返回一个值。它和数学中的函数概念类似,读取输入,然后返回一个输出。
Scala的函数可以当成变量使用,可以作为输入传递给其他函数,也可以定义成匿名函数字面量。它可以作为变量的值,也可以在其他函数的函数体内定义,还可以作为其他函数的返回值返回。特殊地,Scala函数的名称可以包含符号,如:+,++,~,&,-,--,\,/,:等字符。
Scala函数声明:
def functionName ([list of parameters]) : [return type]
Scala函数定义:
def functionName ([list of parameters]) : [return type] = {
function body
return [expr]
}
5.1 参数传递方式
Scala拥有两种参数传递的方式:Call-by-Value(按值传递)与Call-by-Name(按名传递)。按值传递避免了参数的重复求值,效率相对较高;按名传递将求值推延至实际调用点,但有可能造成重复的表达式求值。高阶函数是指将其他函数作为参数或结果是函数的函数。注意,按名传递和高阶函数有很近似的语法:
按值传递例子:def and(x: Boolean, y: Boolean) = x && y
按名传递例子:def and(x: => Boolean, y: => Boolean) = x && y
高阶函数例子:def apply(f: Int => String, v: Int) = f(v)
5.2 可变参数
Scala允许指定函数的最后一个参数可重复,这允许将可变长度的参数列表传递给函数。可变参数的例子如下:
def printStrings( args:String* ) = { ... }
5.3 匿名函数
Scala中的匿名函数称为函数字面量,在运行时,函数字面量被实例为称为函数值的对象。匿名函数的定由由处于圆括号中的输入函数列表、右箭头和函数体构成。下面是一个例子: (x: Int) => { x + 100 }
5.4 部分应用函数和柯里化函数(Currying)
柯里化函数是一个带有多个参数,并引入到一个函数链中的函数,每个函数都使用一个参数。下面是柯里化函数定义的例子:
def strcat(s1: String)(s2: String) = s1 + s2
def strcat(s1: String) = (s2: String) => s1 + s2
部分应用函数,是指一个函数有n个参数,而我们为其提供少于n个参数,就得到了一个部分应用函数。部分应用函数的例子:
def add(x:Int,y:Int,z:Int) = x+y+z
def addX = add(1,_:Int,_:Int)
5.5 闭包(Closures)
闭包就是使用了非参数非局部变量的函数字面量。闭包是一个有状态(不消失的私有数据)的函数。
以上是关于Scala 基础知识的主要内容,如果未能解决你的问题,请参考以下文章