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)
这是因为,如果期望出现函数的地方我们提供了一个方法的话,该方法就会自动被转换成函数。
网友评论