Scala(二) —— 函数

try 表达式

var result = try{
    Integer.parseInt("dog")
}catch{
    case _ => 0
}finally{
    println("excute")
}
match 表达式
val code = 3
var result = code match{
    case 1 => "one"
    case 2 => "two"
    case _ => "others"
}
求值策略
  • Call By Value
    • 对函数实参求值,且仅求值一次
  • Call By Name
    • 函数实参每次在函数体内被用到时都会求值

def foo(x:Int,y: => Int):Int={
    x * x
}

def loop():Int = loop
函数

(1)匿名函数

匿名函数定义格式 形参列表 => {函数体}

(2)柯里化函数

把具有多个参数的函数转换为一条函数链,每个节点上都是单一参数

例子1:


def add(x:Int)(y:Int) = x + y

var add1 = add(1)_
add1(5) 等同于 add(1)(5)

def add2 = add(2)_
add2(6)等同于add(2)(5)

例子2


def fun(f:Int => Int)(a:Int):Int={

    f(a)
    
}

fun(x=>x*x)(5) //等同于  f(x) =  x*x ;x = a;a=5;

(3)尾递归

覆盖当前记录,而不是在栈中创建新的函数


@annotation.tailrec
def fun(n:Int,m:Int):Int={
    if(n <= 0) m
    else fun(n-1,m*n)
}

@annotation.tailrec
def fun1(n:Int,m:Int):Int={
    if(n == 1) m
    else fun(n-1,m+n)
}

例子1,计算f(x),a-b的求和

该例子涉及到的知识点有函数柯里化、尾递归


final def find(f:Int => Int)(a:Int)(b:Int):Int={

    @annotation.tailrec
    def loop(n:Int,acc:Int):Int={

      if(n > b){
        acc
      }else{
        loop(n+1,acc+f(n));
      }

    }

    loop(a,0)
  }

转载于:https://www.cnblogs.com/fonxian/p/8503427.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值