快学Scala(2) 控制结构和函数
来源:互联网 发布:柴可夫斯基妻子知乎 编辑:程序博客网 时间:2024/05/19 13:15
1. 条件表达式
//普通形势的if-elseif(x > 0) 1 else -1//if-else返回类型,是分支类型的公共超类型,如以下表达式的超类型是Anyif(x > 0) "string" else -1//如果缺少了else,那么else返回类型就是Unitif(x>0) 1//Scala中没有switch语句
2. 循环
//while与do-while循环与Java没有区别//for循环不存在for(int i = 0; i < 10 ; i++)的形式//1. for的形式是for(i <- 表达式)//2. 如果for循环中的i之前没有指定过val或var,那么该变量类型就是集合元素的类型,作用域持续到循环结束//3. Scala中没有break或continue,可以通过三种形式来解决:// 1)Boolean控制// 2)循环体中使用return// 3)scala.util.control.Breaks.break方法//4. 可以有多个生成器,每个生成器都可以有守卫//5. 在循环体后添加yield,即for推导式,可以生成集合for(i <- 1 to 10) yield i % 3//生成(1,2,0,1,2,0,1,2,0,1)for(i <- 1 to 3; j <- 1 to 3 if i!=j)
3. 函数
- 不是递归函数就不需要指定返回值,递归函数必须指定返回值
- 函数参数可以带默认值,调用函数时可以指定参数名,也可以不指定,也可以混用
- 变长函数
//一般函数,可以不指定返回值def abs(x: Double) = if(x >=0) x else -x//递归函数,必须指定返回值def fac(n: Int) : Int = if (n <= 0) 1 else n * fac(n-1)//默认参数def decorate(str:String, left:String="[", right: String) = left + str + right//以下调用均可decorate("Hello")decorate("Hello","<<[")decorate("Hello",right="]>>")//没有默认参数的,不能不调用//变长参数//函数体内得到的是一个Seq参数,但如果有一个Seq对象,不能直接作为变长函数的输入//如果要作为参数,必须追加 :_*def sum(args: Int*) = { var result = 0 for (arg <- args) result += arg result}val s = sum(1 to 5) //wrongval s = sum(1 to 5: _*) //right
4. TIPS
- REPL中,如果要输入多行代码,就用:paste
- 复制表达式的返回值是Unit,所以不能使用x=y=1这样的表达式
- 在写较长的语句、需要分为两行是,要确保第一行不能用做语句结尾的符号结尾
- 块表达式也有输出结果,最后一个表达式就是输出。
- 懒值:在val之前添加lazy。懒值必须是val,不能是var。
- 异常:scala没有“受检”异常,即不需要在函数或方法上声明,需要抛出哪些异常。
0 0
- 《快学Scala》 第2章 控制结构和函数
- 快学Scala第2章--控制结构和函数
- 快学Scala(2) 控制结构和函数
- 《快学Scala》——控制结构和函数
- 《快学Scala》第2章 控制结构和函数 练习
- 快学Scala第2章–控制结构和函数 笔记
- 《快学Scala》习题详解 第2章 控制结构和函数
- 快学Scala习题解答—第二章 控制结构和函数
- 快学Scala习题解答—第二章 控制结构和函数
- 快学Scala习题解答—第二章 控制结构和函数
- 快学Scala 读书笔记之 Chapter 2、3、4(控制结构函数,数组,映射,元组)
- 快学Scala-方法和函数
- Scala 控制结构和函数
- 快学Scala学习笔记及习题解答(1-4基础、控制、函数、数组、元组和映射)
- Scala学习笔记2 - 控制结构和函数
- Scala学习笔记-控制结构和函数(2)
- [scala之二]控制结构和函数
- Scala详解---------控制结构和函数
- 使用adb命令时的错误
- Win7下Ant的安装与配置
- iOS编译问题:Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- [Android]安全第五步,看懂汇编(续)
- 最近两年的总结
- 快学Scala(2) 控制结构和函数
- CollapsingToolbarLayout 与 TabLayout结合使用实现炫酷效果
- Android开发之拥有Material Design风格的折叠布局
- 清除浮动
- Minimizing quadratic energies with constant constraints
- XMPP学习1-认识XMPP
- angularJS1 url中携带参数的获取
- Nginx重新编译添加模块
- rep stos dword ptr es:[edi]