方法和函数的区别


一.常见的几种形式

方法中用函数做参数
  def m1(函数名:(参数类型...) => 返回值) : Int = {
  }
函数的定义
  (形参名:类型...) => 函数体
函数定义常见形式
  val f1 = (x:Int,y:Int) => x + y
函数类型的变量
  val a:(函数参数类型) =>返回值类型 = 函数名

二.方法和函数的区别

1.函数可作为一个参数传入到方法中,而方法不行,通常情况下方法名可以作为参数,这是因为编译器会自动将方法转换成函数,但是仍然不可以说方法可以作为参数

def m1(f: (Int, Int) => Int): Int = {
    f(2, 6)
  }
val f1 = (x: Int, y: Int) => x + y
def f2(x: Int, y: Int): Int = {
    x - y
  }
def main(args: Array[String]): Unit = {
    println(m1(f1)) //正确
    println(m1(f2()) //编译错误
    println(m1(f2)) //正确
  }

2.在Scala中无法直接操作方法(菜鸟上这样写的,不明所以),如果要操作方法,必须先将其转换成函数。有两种方法可以将方法转换成函数

val f1 = m _

在方法名称m后面紧跟一个空格和下划线告诉编译器将方法m转换成函数,而不是要调用这个方法。 也可以显示地告诉编译器需要将方法转换成函数

val f1: (Int) => Int = m 

函数类型的变量f1 如果我们直接把一个方法赋值给变量会报错。如果我们指定变量的类型就是函数,编译可以通过

3.函数必须要有参数列表,而方法可以没有参数列表

4.可以把一个函数赋值给变量,但是不可以把一个方法给变量

val f = m _
val f1: (Int) => Int = m
val f2 = m //报错

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM