scala函数和方法的区别

1. 定义方式不同
定义方法
def me(a:Int,b:Int) = a+b
定义函数
val fu = (a:Int,b:Int) => a+b
1.1参数列表对于方法是可选的,即:参数列表可以没有,也可以为空。
比如:方法可以这样写
def me() = 10 ; def me = 10 ;
1.2但是对于函数是强制的,即:参数列表可以空,但不能没有。
比如:
val fu = () => 10 这里的括号不能省略。

2.用法不同
2.1 作为参数传递
函数是可以作为参数传递,函数名只是代表函数自身;方法不能作为参数传递,用的方法名的地方意味这调用,那为什么在需要函数出现的地方我们可以提供一个方法,在scala中很多高级函数,如map(),filter()等,都是要求提供一个函数作为参数。但是为什么我们可以提供一个方法呢,比如这样:

scala> val myList = List(3,56,1,4,72)
myList: List[Int] = List(3, 56, 1, 4, 72)

scala> // map()参数是一个函数

scala> myList.map((x) => 2*x)
res15: List[Int] = List(6, 112, 2, 8, 144)

scala> //尝试给map()函提供一个方法作为参数

scala> def m4(x:Int) = 3*x
m4: (x: Int)Int

scala> //正常执行

scala> myList.map(m4)
res17: List[Int] = List(9, 168, 3, 12, 216)

这是因为,如果期望出现函数的地方我们提供了一个方法的话,该方法就会自动被转换成函数。

你可能感兴趣的:(scala函数和方法的区别)