接下来的知识点,枯燥无味,但还是需要了解一下。。。
1、条件表达式
$..>if(x > 0) 1 else -1
$..>val s = if(x>0) 1 else -1
$..>if(x>0) s=1 else s=-1
$..>if (x>0) "xx" else -1 //混合类型
//scala每个语句都有值和类型
$..>if(x>0) 1 //如果x <= 0 ???等价于下方
$..>if(x>0) 1 else()//class Unit,写做()
//如果想要换行必须使用{},否则编译器混淆
$..>if(x>0){1}
else if(x == 0) 0 else -1
//如果粘贴代码块,无需担心,输入
$..>:paste
$..>ctrl + k //scala会整体处理粘贴的代码
2、语句结束
//scala从不要求“;”,但是有些时候需要
$..>if(n >0){r=r*n;n-=1}
//多行语句,操作符结尾不会被认为是结束
$..>... +
....
$..>if(..){ //使用{}
r = r*n n-=1
}
3、块表达式和赋值
//块的最后表达式是block的值
$..>val dis={val dx=..;...;sqrt(2)}
//以下语言不可靠,赋值语句的值是(),()不能赋值给x
//赋值语句的值就是()---Unit
$..>x=y=1
4、Loop
$..>while(n >0){
r = r * n
n -= 1
}
//scala没有for(;;)语句,只有如下的形式
for(i <- 1 to 10) //to的范围是闭区间[]
r = r * i
$..>for(i <- 0 until 10) //until是半开半闭开区间[)
r = r * i
$..>for(ch <- "abc") sun +=ch
//scala没有break和continue语句
1.使用boolean变量
2.嵌套函数
5、高级Loop
$..>for(i<-1 to 3;j<- 1 to 3)print((10*i+i)+" ") //多个生成
//每个生成器都可以带条件
for(i<-1 to 3 ; j <- 1 to 3 if i !=j ) ...
12 13 21 23 31 32
//借助变量
$..>for(i<-1 to 3;from = 4-i;j<-from to 3)...
6、函数
- 无返回值
//方法是在对象上,而函数不是//函数定义指定名称、参数和body//必须指定参数类型def fac(n:Int)={ var r = 1 for(i<-1 to 10) r = r *1 r //最后的表达式是函数的返回值}
- 有返回值
- 递归函数
7、变长参数
def sum(args:Int*)={ var r = 0 for(arg<-args) r +=arg r}val s = sum(1,2,4,5,6)val s = sum(1 to 5) //errorval s = sum(1 to 5:_*) //right
8、Lazy values
9、Exception
//scala没有被检异常,不用声明抛出语句.//throw表达式的类型是Nothing,ifesle的类型不能是//Nothing,因此就是不为Nothing的分支类型throw new IllegalArgumentException("xx")try{ ...} catch{ case _:MalformedURLException=>.//不适用异常对象 case ex:IOException =>ex.printStackTrace()}
try{ ...}finally{ in.close()}