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))
}
}