2021-10-24

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈沐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值