val age:Int = 123
val height = 123.3
var weight:Double = 123.3
var price:Float = 123.4f
var isTrue:Boolean = true
val age:Int = 123
age.toString
AnyVal | AnyRef |
---|---|
Double | collections |
Float | scala classes |
Long | java classes |
Int | Null(上述三种子类的子类),它只有一个实例值null,可以给任意的AnyRef |
Short | |
Byte | |
Boolean | |
Char | |
StringOps | |
Unit(等价于void) |
//强制类型转换
int num = (int)2.7 //java
val num:Int = 2.7.toInt //scala
val num:Int = 123
var value:String = num + "";
if(条件){
}else{
}
if(条件){
}else if(条件){
}
val height = 12
val res = if(height > 12){
9 + 10
}else{
123
"okokok"
"yyy"
}
println(res)//输出"yyy"
//当执行的最后一行的返回值是Unit(即无返回值类型),则返回()
val height = 123
val res = if(height > 12){
9 + 10
println("okok")
}else{
123
"okokok"
"yyy"
} //此时res为()
// x to y 产生[x,y]内的所有整型元素,左右均闭
// x until y [x,y) 左闭右开
for(i <- 1 to 10){
println(i + "")
}
var lst = list("xxx",123,12.4)
for(item <- lst) println(item)
for(i <- 1 to 10 if i%2 == 0) println(i) //只输出偶数
//等价于
for(i <- 1 to 10){
if(i %2 == 0) println(i)
}
for(i <- 1 to 10;j = i + 123) println(j)
//等价于
for(i <- 1 to 10){
j = i + 123
println(j)
}
for(i <- 1 to 10;j <- 1 to 2) print(i + "," + j)
//等价于
for(i <- 1 to 10)
for(j <- 1 to 2) print(i + "," + j)
val res = for(i <- 1 to 10) yield{
代码块
}
res为一个Vector,其元素为每一次遍历的返回值,即代码块执行的最后一句代码的返回值
var i = 3
while(i < 10){
i += 1
println(i)
} //while没有返回值
do{
代码块
}while(条件)
scala没有内置的break和continue
import scala.util.control.Breaks.break
var i = 3
while(i < 10){
i += 1
println(i)
break()
}
//该break()函数实质上是扔出异常Exception in thread "main" scala.util.control.BreakControl,且并未进行异常值捕获,非真正的跳出循环,因此无法实现跳出循环的功能
//为了满足跳出循环的需求,scala进一步封装了breakable函数
import scala.util.control.Breaks.breakable
breakable {
var i = 3
while (i < 10) {
i += 1
println(i)
}
}
//breakable是一个高阶函数(即将函数作为参数),底层实现实质上是完成了上述break的异常捕获
for( i <- 1 to 10 if i % 2 != 0){
...
}
def sum(n1:Int,n2:Int):Int = {
return n1 + n2
}
//1.可以是无参函数
//2.返回值可以通过return指定,当无return关键字时,将函数最后一句执行的代码的返回值当作函数的返回值
//3.返回值类型可以省略,def sum(n1:Int,n2:Int)={}会进行自动类型推导 递归函数必须指定返回值类型
//4.如果连3中的=也省略,即def sum(n1:Int,n2:Int){},则无返回值,即便函数中给出返回值,等价于def sum(n1:Int,n2:Int):Unit={}
val sum:(Int,Int) => Int = {
(n1,n2) => n1 + n2}
(n1:Int,n2:Int) => {
n1 + n2}
val add = (_:Int) + (_:Int)
def sum(n:Int,args:Int*) = {
var s = n
for(i <- args) s += i
s
}
//调用 sum(1,2,3,4,5)
//可变参数必须放在参数末尾
//函数接受到的可变参数其实是sequence类型,可用for获取
def sleepFunc()={
println("sleep start...")
123
}
def printFunc(): Unit ={
println("print start ...")
}
lazy val result = sleepFunc()
printFunc()
print(result)
//printFunc会先与sleepFunc被调用
//lazy 只能修饰al类型的