Scala:方法、函数,柯里化、闭包

Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。
Scala 中使用 val 语句可以定义函数,def 语句定义方法。

class Test{
  def m(x: Int) = x + 3  //方法
  val f = (x: Int) => x + 3 //函数
}

方法声明

Scala 方法声明格式如下:

def functionName ([参数列表]) : [return type]

如果你不写等于号和方法主体,那么方法会被隐式声明为抽象(abstract),包含它的类型于是也是一个抽象类型。

方法定义

方法定义由一个 def 关键字开始,紧接着是可选的参数列表,一个冒号 : 和方法的返回类型,一个等于号 = ,最后是方法的主体。

Scala 方法定义格式如下:

def functionName ([参数列表]) : [return type] = {
   function body
   return [expr]
}

函数

方法只能用def接收,函数可以用def接收,也可以用val接收。

    scala> val fun1 =(x:Int,y:Int) => x*y
    scala> val fun2:(Int ,Int) => (Int) = (x,y) =>x*y

scala> def add(x:Int,y:Int)=x+y  //方法
add: (x: Int, y: Int)Int

scala> val addF=(x:Int,y:Int)=>x+y  //函数
addF: (Int, Int) => Int = <function2>

scala> add _   // 方法变为函数
res1: (Int, Int) => Int = <function2>

柯里化

将原来接受两个参数的函数变成新的接受一个参数的函数的过程。
新的函数返回一个以原有第二个参数为参数的函数。

    def add2(x:Int)(y:Int) = x + y   //柯里化

闭包

闭包就是引用类里边其他地方定义的变量
这样定义的函数变量 addMore 成为一个"闭包",
因为它引用到函数外面定义的变量,
定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。

object 闭包 {
    val more=10
    val addMore=(x:Int ) => x+more
    def main(args: Array[String]): Unit = {
        println(addMore(20))
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容