函数和方法区别
函数可以作为值传递,可以是入参,也可以是返回值,而方法不行,
真正用的时候 函数和方法也不会细分
如果我们用def定义的东西就是方法.不能叫函数.
如果用val接收了一下这个方法,那么这个方法就变成了函数.
方法转成函数
def main(args: Array[String]): Unit = {
// 这里就是函数了
val f = foo _ // 把方法转成了函数
f(10) // 函数执行
foo(10) // 方法执行
}
//这里就是方法
def foo(a: Int) {
return println(a)
}
输出:
10
10
方法转成函数案例2
def main(args: Array[String]): Unit = {
// 把方法转成了函数, 没有环境, 所以必须手动转换
val add1 = add _
// 这个时候也是在把方法转成了函数, 但是是scala自动完成
val add2: (Int, Int) => Int = add
println(add1(10, 20))
println(add2(10, 20))
}
// 方法
def add(a: Int, b: Int): Int = {
return a + b;
}
定义和使用函数
=>左面是参数类型,=>右面是返回值类型
// 直接定义函数,函数不能声明返回值类型, 只能靠推导
() => {}
使用函数
// 定义一个函数,用int作为参数同时用int作为返回值
val f: Int => Int = (a: Int) => a * a
val r: Int = f(10)
println(r)
输出:
100
把方法当成函数传递
def main(args: Array[String]): Unit = {
val r: Int = foo(add) //把方法当函数传递
println(r)
}
def foo(op: (Int, Int) => Int) = {
op(10, 20)
}
def add(a: Int, b: Int) = a + b
输出
30