包
包定义
- JAVA方式
package top.xfdtm
class Clazz
- C#方式
package top.xfdtm{
class Clazz
}
引用
默认情况下,Scala 总会引入 java.lang._ 、 scala._ 和 Predef._
import java.awt.Color // 引入单成员
import java.awt._ // 引入包内所有成员
import java.awt.{Color, Font} // 引入几个成员
import java.util.{HashMap => JavaHashMap} // 引入成员重命名
import java.util.{HashMap => _, _} // 引入所有成员, HashMap隐藏
变量定义
// val 类似于java中的final, 定义val后无法在重新赋值
val msg = "Hello World!"
val msg1: String = "Hello World!"
var msg2 = "Hello World!"
val num1, num2 = 100
val {val1, val2} = Pair(40, "val")
数据类型
数据类型 | 描述 |
---|---|
Byte | 8位有符号补码整数。数值区间为 -128 到 127 |
Short | 16位有符号补码整数。数值区间为 -32768 到 32767 |
Int | 32位有符号补码整数。数值区间为 -2147483648 到 2147483647 |
Long | 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 |
Float | 32位IEEE754单精度浮点数 |
Double | 64位IEEE754单精度浮点数 |
Char | 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF |
String | 字符序列 |
Boolean | true或false |
Unit | 表示无值,和其他语言中void等同。Unit只有一个实例值,写成() |
Null | null或空引用 |
Nothing | Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型 |
Any | Any是所有其他类的超类 |
AnyRef | AnyRef类是Scala里所有引用类(reference class)的基类 |
常用字面量
- 整形字面量
21
0xFFFFFFFF
0777L
- 浮点型字面量
0.0
1e30f
1.0e100
.1
- 符号字面量
<标识符> 可以是任何字母或数字的标识(注意:不能以数字开头)
'<标识符>
scala.Symbol("<标识符>")
- 字符串字面量
"Hello,\nWorld!"
"""Kole
is
me"""
函数定义
def max(x: Int, y: Int): Int = {
if (x > y) x
else y
}
var max = (x: Int, y: Int) => if (x > y) x else y
循环
while 循环
var i = 0
while (i < args.length) {
println(args(i))
i += 1;
}
do while 循环
var i = 10
do{
println( i )
} while ( i > 0 )
for
// 指令式for的函数形式
// 此处msg是val类型,非var类型
for (msg <- args)
println(msg)
to: [1-10]
// to实际上是Int中的一个方法 (1).to(10)
var i = 0
for ( i <- 1 to 10 )
println(i)
until: [1-10)
var i = 0
for ( i <- 1 until 10 )
println(i)
分号(;)设置区间
for( a <- 1 to 3; b <- 1 to 3){
println( "Value of a: " + a );
println( "Value of b: " + b );
}
循环过滤
// 只执行if返回true的
for( a <- numList; if a != 3; if a < 8 ){
println( "Value of a: " + a );
}
变量存储yield
// 返回值作为一个变量存储
var retVal = for (i <- list; if i != 4)yield i
// 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。
指令式循环
// scala允许使用指令式的编程风格
// 函数式语言的主要特征, 函数是头等结果
args.foreach(msg => println(msg))
// 指定类型的正规写法
args.foreach((msg: String) => println(msg))
// 更紧凑的写法
args.foreach(println)