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 基础知识的主要内容,如果未能解决你的问题,请参考以下文章

Scala:基础知识01

Scala:基础知识04

Scala 基础—— 基础类型和基础操作

Scala:基础知识03

Scala:基础知识02

Scala之旅-基础