函数和方法区别

函数可以作为值传递,可以是入参,也可以是返回值,而方法不行,

真正用的时候 函数和方法也不会细分

如果我们用def定义的东西就是方法.不能叫函数.

如果用val接收了一下这个方法,那么这个方法就变成了函数.

方法转成函数

  1. def main(args: Array[String]): Unit = {
  2. // 这里就是函数了
  3. val f = foo _ // 把方法转成了函数
  4. f(10) // 函数执行
  5. foo(10) // 方法执行
  6. }
  7. //这里就是方法
  8. def foo(a: Int) {
  9. return println(a)
  10. }

输出:

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