您的位置:首页 > 其它

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,只有一个值,写做
()


如果要打印一个值,用
print
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: