Scala学习(基础,控制结构)
2015-12-23 21:13
337 查看
1. 基础
以val定义的值是常量val a = 0 //a的值是不可变的
以var定义的值是变量
var b = 0 //b的值是可变的
不需要给出值或变量的类型,这个信息可以从你用来初始化它得表达式推断出来,声明值或变量但不做初始化会报错
在Scala中,变量或者函数的类型总是写在变量或者函数的后面
val c: String = "hello"
scala的7中数值类型:Byte,Char,Short,Int,Long,Float和Double。这些类型是类
scala没有提供
++和
--操作符,我们需要使用
+=1或者
-=1
d += 1 //将d递增
Scala提供函数,使用数学函数很简单
sqrt(2) //求开方 pow(2,4) //求2的4次方 min(3,Pi) //求3和Pi那个小
数学函数是在
scala.math包中定义的,使用数学函数时需要引入该包
import scala.math._
不带参数的Scala方法通常不使用圆括号
2. 控制结构和函数
在Scala中if/else表达式是有值的,这个值就是跟在if或else之后的表达式的值。可以将if/else表达式的值赋给变量val e = if(x > 0) 1 else -1
在Scala中每个表达式都应该有某种值。if/else表达式如果else部分缺失,就可能没有输出值,解决方案就是引入一个Unit类,写作
(),不带else的if语句等同于
if(x > 0) 1 else ()
在if/else表达式中,如果一个分支类型是Nothing,那么表达式的类型就是另一个分支的类型
在Scala shell中粘贴成块代码时,键入
:paste,把代码粘贴进去,然后按下Ctrl+D
在Scala中,
{}块中包含了一系列的表达式,其结果也是一个表达式,块中最后一个表达式的值就是块的值
Unit类型等同于Java和C++中的void,只有一个值,写做
()
如果要打印一个值,用
println或
printf函数
print("f") println(42) printf("hello, %s.You are %d years old.", "Fred", 42)
for语句:
for(i <- 表达式)
for (i <- 1 to n) r = r + 1
1 to n:返回1到n(含)的Range。until方法返回一个并不包含上限的区间。
高阶for循环
以变量 <- 表达式的形式提供多个生成器
for (i <- 1 to 3; j <- -1 to 3) print((10 * i + j) + " ")
每个生成器都可以带一个守卫,以if开头的Boolean表达式
for (i <- 1 to 3; j <- -1 to 3 if i != j) print((10 * i + j) + " ")
if之前没有分号
可以在循环中使用变量
for (i <- 1 to 3; from = 4 - i; j <- from to 3 ) print((10 * i + j) + " ")
如果for循环的循环体以yield开始,则该循环会构造出一个集合
for (i <- 1 to 10) yield i%3 //生成Vector(1,2,0,1,2,0,1,2,0,1)
定义函数时,需要给出函数的名称,参数和函数体
def abs(x : double) = if (x >= 0 ) x else -x
只要函数不是递归的,就不需要指定返回类型,对于递归函数,我们必须指定返回类型
def fac(n : int) : Int = if(n <= 0) 1 else n * fac(n - 1)
如果函数体包含在花括号当中但没有前面的=好,那么返回的类型就是Unit,这样的函数被称作过程
def box(s: String) { ... }
throw表达式的内容是Nothing
相关文章推荐
- codeforces 551E. GukiZ and GukiZiana 分块
- BZOJ1101: [POI2007]Zap 莫比乌斯反演
- C语言开发总结(二十二)
- Unity3d vector3.forward和transform.forward的区别!
- 发现一个可以在线运行JS代码的网站
- linux命令 --> cd命令
- 学习手册:JAVA序列化和反序列化及漏洞补救
- C# 关闭当前窗体打开另一窗体?
- PAT-判断奇偶性(基础函数题)
- HDU 2896 病毒侵袭 AC自动机
- json和jsonp
- curl connection refused 问题
- curl connection refused 问题
- DataGuard---->物理StandBy的角色切换之switchover
- Linux下怎么输入重音符号
- GDAL编译
- AddForce和velocity有什么区别
- 属性声明
- (五)数码管仿真 02
- Linux yum源完全配置