Scala笔记
循环守卫
1)基本语法
for(i <- 1 to 3 if i != 2) {
print(i + " ")
}
println()
说明:
(1)循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为true则进入循环体内部,为false则跳过,类似于continue。
(2)上面的代码等价
for (i <- 1 to 3){
if (i != 2) {
print(i + " ")
}
}
循环步长
1)基本语法
for (i <- 1 to 10 by 2) {
println(“i=” + i)
}
说明:by表示步长
2)案例实操
需求:输出1到10以内的所有奇数
for (i <- 1 to 10 by 2) {
println(“i=” + i)
}
输出结果
i=1
i=3
i=5
i=7
i=9
匿名函数
匿名函数即是在定义函数的时候不给出函数名。匿名函数是使用箭头“=>”定义的,箭头的左边是参数列表,箭头右边是表达式,表达式将产生函数的结果
调用匿名函数可以将函数赋值给一个常量或变量,然后通过常量名或变量名调用该函数
val addInt: (Int, Int) => Int = (x: Int, y: Int) => x + y
addInt(1,2)
addInt:Int = 3
高级函数
高阶函数就是操作其他函数的函数。高阶函数可以使用函数作为参数,也可以使用函数作为输出结果。
高阶函数经常将只需要执行一次的函数定义为匿名函数作为参数。
scala> def addInt(f:(Int,Int)=>Int,a:Int,b:Int)=f(a,b)
addInt: (f: (Int, Int) => Int, a: Int, b: Int)Int
scala> addInt((a:Int,b:Int)=>a+b,1,2)
res34: Int = 3
高阶函数可以产生新的函数,并将新的函数作为返回值。
递归函数
递归函数意味着函数可以调用它本身
scala> def factorial(n:Int):Int={ if (n<=1) 1 else n*factorial(n-1)}
factorial: (n: Int)Int
scala> factorial(5)
res0: Int = 120
柯里化
柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数
def add(a:Int):Int=>Int{
def subAdd(b:Int):Int=a+b
subAdd
}
add(1)(2)
def add(x:Int)(y:Int) = x + y
add(1)(2) 实际上是依次调用两个普通函数(非柯里化函数),第一次调用使用一个参数 x,返回一个函数类型的值,第二次使用参数y调用这个函数类型的值。
def add(x:Int)=(y:Int)=>x+y
接受一个x为参数,返回一个匿名函数。
以下几种方式都是一样的
def add1(x:Int,y:Int,z:Int)=x*y*z
def add2(x:Int)=(y:Int,z:Int)=>x*y*z
def add3(x:Int)(y:Int)(z:Int)=x*y*z
def add4(x:Int)(y:Int)=(z:Int)=>x*y*z