1.函数可以作为参数传入到方法中,而方法不行。
package com1/*** @author yangxin_ryan*/object Test14 {/*** 定义一个方法* 方法m1参数要求是一个函数,函数的参数必须是两个Int类型* 返回值的类型也是Int类型* @param f* @return*/def m1(f:(Int, Int) => Int): Int = {f(2, 6)}// 定义一个函数f1,f2 参数是两个Int类型,返回值是一个Int类型var f1 = (x: Int, y: Int) => x + yvar f2 = (m: Int, n: Int) => m * ndef main(array: Array[String]): Unit = {val r1 = m1(f1)println(r1)val r2 = m1(f2)println(r2)}}
输出分别是:
8
12
2.在Scala中无法直接操作,如果操作方法,必须先将其转换成为函数。有两种方法将方法转换成为函数:
方法一:
def m3(x: Int, y: Int): Int = x * yval f3 = m3 _
这里的方法m3后面跟着的一个空格和下划线就是将方法改成了函数,
方法二:
直接传递方法名字,编译器自动将方法转化为函数
package com1/*** @author yangxin_ryan*/object Test15 {def ttt(f: Int => Int): Unit = {val r = f(10)println(r)}val f0 = (x: Int) => x * xdef m0(x: Int): Int = {x * 10}// 空格 + 下划线转换def f1 = m0 _def main(args: Array[String]): Unit = {ttt(f0)ttt(m0 _)// 自动转化ttt(m0)ttt(x => m0(x))ttt(f1)}}
3.函数必须要有参数列表, 而方法可以没有参数列表
package com1/*** @author yangxin_ryan*/object Test16 {def m1 = 100def m2() = 100val f1 = () => 100// 错误表示,需要参数列表val f2 => 100}