1.函数柯里化
def test(a: Int, b: Int): Unit = {
for (i <- 1 to a) println(i)
for (i <- 1 to b) println(i)
}
var a = 10;
var b = 100
test(a, b)
2.构成柯里化
**函数柯里化的做法,就是将无关的参数进行分离,可以设定多个参数列表;**
**修改上述test函数如下;**
but
–1.此方式赋值1个仅在给函数对象赋值时候传入即可
–2.柯里化运行的时候,只有两个函数都传入了,菜能执行:也就是说,只赋值1个的函数对象不能()运行,必须参数传够;
// 2.构成柯里化
def test1(a: Int)( b: Int): Unit = {
for (i <- 1 to a) println(i)
for (i <- 1 to b) println(i)
}
// 修改完成后可以调用一个参数
val intToUnit:Int => Unit = test1(11)
intToUnit(1) //z=执行整体函数
test1(10)(20)
3.递归函数
关于scala中的递归函数需要结果类型,不能让编译器自己推断
def test11(num:Int):Int={
if (num<1) 1 else num*test11(num-1)
}
小结:递归函数必须写上函数返回值;
4.惰性函数
惰性函数目的:提高代码效率;
lazy标记的函数表示惰性函数,不需要预先计算他们;
开发过程中,可以将运行复杂的函数标记为惰性函数;
object LazyDemo {
def main(args: Array[String]): Unit = {
lazy val res = sum(10, 20) // lazy修饰,sum()函数不会被立即执行,要首次被调用之后再执行
println("================")
// println("res:"+res)
}
def sum(a: Int, b: Int): Int = {
println("sum执行了")
a + b
}
}
object LazyDemo {
def main(args: Array[String]): Unit = {
lazy val res = sum(10, 20) // lazy修饰,sum()函数不会被立即执行,要首次被调用之后再执行
println("================")
println("res:" + res) //调用sum方法
}
def sum(a: Int, b: Int): Int = {
println("sum执行了")
a + b
}
}
输出
sum执行了
res:30
代码二: