【Scala】函数:匿名函数、高阶函数、嵌套函数

 

1、匿名函数

定义方法:

var  函数名 =  (参数列表) =>  函数的实现代码

下面的代码实现了 匿名函数、不带参数的匿名函数:

object Test {
	def main(args: Array[String]) {
		
		//嵌入在main函数中的 函数
		//f_inc函数式
		def f_inc = new Function2[Int, Int, Int] {
			def apply(x:Int,y: Int):Int = x + y + 1;
		}
		
		println(f_inc(1,2))
		
		//匿名函数 是上面f_inc函数写法的简化版
		var inc = (x:Int) => x + 1
		
		println(inc(1))
		
		
		//不带参数的匿名函数
		var userDir = () => {System.getProperty("user.dir")}
		println( userDir() )
	}	
}

第1个定义的函数f_inc是 匿名函数inc的原始实现方式,其中 Function2 中的2表示有2个参数,第3个Int表示返回值。

 

2、高阶函数

所谓高阶函数,就是可以操作其他函数的函数,这里的操作 是指 可以把函数作为参数,也可以作为 输出结果。

下面代码中 apply就是高阶函数,参数中的f 其实是一个函数,因为f的参数类型是 Int=>String ,另一个参数v之后作为f的参数,

另外,func函数右侧的[T] 表示函数的输入参数类型是 泛型,也就是参数类型是可以变化的,关键看调用时指定的类型,这里apply在定义时指定 参数v为Int类型,所以 对应到func函数中的T 就是 Int 类型:

object Test {
	def main(args: Array[String]) {
		
		println( apply(func, 10) )
	}	
	
	//高阶函数
	def apply( f: Int => String, v: Int) = f(v)
	
	def func[T](x: T) = "[" + x.toString + "]"
}

输出:

C:\Users\Administrator\Desktop>scala Test.scala
[10]

3、嵌套函数

嵌套函数就是 定义在函数中的 函数。

object Test {
	def main(args: Array[String]) {
		
			println( factorial(3) )
	}	
	
	//求阶乘
	def factorial(i : Int): Int = {
	    
		//包含在函数 factorial中的 函数
		def fact(i: Int, acc: Int): Int = {
			if(i<=1)
				acc                 //fact函数的返回值
			else 
				fact(i-1, i * acc)  // i-1表示开始计算下一次阶乘
		}
		
		fact(i, 1)  //计算i的阶乘
	}
}

输出:

C:\Users\Administrator\Desktop>scala Test.scala
6

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值