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)
  }
												
											Scala(二) —— 函数的更多相关文章
- scala(二) Future执行逻辑解读
		
在scala中是没有原生线程的,其底层使用的是java的Thread机制.但是在scala中对java Thread进行了封装,实现了更便于操作线程的Future. 官方文档: Futures pro ...
 - Python进阶(二)----函数参数,作用域
		
Python进阶(二)----函数参数,作用域 一丶形参角度:*args,动态位置传参,**kwargs,动态关键字传参 *args:  动态位置参数. 在函数定义时, * 将实参角度的位置参数聚合 ...
 - scala(二)
		
一.映射 1.Scala映射就是键值对的集合Map.默认情况下,Scala中使用不可变的映射. 如果想使用可变集合Map,必须导入scala.collection.mutable.Map (导包 ...
 - Scala学习——函数高级操作
		
scala函数高级操作 一.字符串高级操作 多行字符串和插值 package top.ruandb.scala.Course06 object StringApp { def main(args: A ...
 - Scala学习——函数
		
一.函数的定义(def) object FunctionApp { //定义函数:方法体内最后一行为返回值,不需要使用return def add(a:Int,b:Int):Int={ a + b } ...
 - Scala的函数,高阶函数,隐式转换
		
1.介绍 2.函数值复制给变量 3.案例 在前面的博客中,可以看到这个案例,关于函数的讲解的位置,缺省. 4.简单的匿名函数 5.将函数做为参数传递给另一个函数 6.函数作为输出值 7.类型推断 8. ...
 - 深入理解PHP内核(十二)函数-函数的定义、传参及返回值
		
原文链接:http://www.orlion.ga/344/ 一.函数的定义 用户函数的定义从function 关键字开始,如下 function foo($var) { echo $var; ...
 - scala匿名函数
		
package com.ming.test import scala.math._ object AnonymousFunc { def valueAtOneQuarter(f:(Double)=&g ...
 - Scala应用函数
		
我们使用“_” 来代替单个的参数,实际上你也可以使用“_”来代替整个参数列表,比如说,你可以使用 print _ 来代替 println (_). someNumbers.foreach(printl ...
 
随机推荐
- 快速幂 ,快速幂优化,矩形快速幂(java)
			
快速幂形式 public static int f(int a,int b,int c){ int ans =1; int base=a; while(b!=0){ if((b&1)!=0) ...
 - python入门 -- 环境搭建(windows)
			
1. 下载Anaconda Anaconda内置了python解释器及经常使用的库,提供了编译好的环境.根据自己的操作系统,自行从下面网站挑选一个较新的版本,下载安装即可. https://mirro ...
 - meta标签的用处详解
			
meta标签的用处: 用来描述html文档的一个属性.列如作者.日期和时间,网页描述,关键字,页面刷新等. 是文档最基本的元数据 元数据(metadata): 用来概括描述数据的一些基本数据 meta ...
 - vue 路由跳转,传参
			
一.直接跳转 //js1.this.$router.push('/ad_new') //html 2.<router-link to="/ad_check"> < ...
 - 2019年我的OKR(objectives and key results)目标与关键成果法
			
一.学习目标目标1:每天必背诵英语单词(可可英语App,百词斩App),掌握英语的基本从句语法,听力训练必备(英语四六级听力题,主要是为通过四六级考试)目标2:考研准备,高数(大一上下册),现代(大 ...
 - Java实验环境的搭建
			
一.下载并安装JDK 1.官网下载安装 打开浏览器,输入http://www.oracle.com/index.html点击进入下载: 点击—>Downloads—>选择Java(JDK) ...
 - 《JavaScript DOM编程艺术》学习笔记(一)
			
这本书是我听说学习前端基础入门书籍,于是就开始看了,大概是从5月10号开始看的吧,一直看到现在,差不多要看完了,书是挺厚的...286页,不过比起JAVASCRIPT权威指南来说还是差多了,权威指南才 ...
 - python语法_列表生成器_生成器_迭代器_异常捕获
			
列表生成式 a = [x for x in range(10)] print(a) x 可进行操作 a = [x*2 for x in range(10)] print(a) x甚至可以为函数, de ...
 - [转]jenkins2 插件安装
			
文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.com/ciandcd Jenkins的安装包和插件在7个国家有20多个镜 ...
 - [Swift]LeetCode318. 最大单词长度乘积 | Maximum Product of Word Lengths
			
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...