val msg="Hello,World"
Scala 可以根据赋值的内容推算出变量的类型。这在Scala语言中成为“type inference”。
Scala访问数组的语法是使用()而非[]。
Scala不支持++i和i++运算符,因此需要使用i += 1 来加一
当你在某个值后面使用()时,Scala将其翻译成对应对象的apply方法
REPL
scala 交互式编译的工具 可以方便进行练习 查看测试
类的定义
case class Money(val amount:Int=1, val currency:String="USD"){
def +(other: Money) : Money = Money(amount + other.amount)
}
类实例的生成与使用
val m1 =Money(100,"rmb")
val m2=Money(200,"rmb")
m1+m2
scala里面有没有,类似python里面的自醒函数 type之类的,可以查看类的方法属性之类?
集合的操作
val nums=List(1,2,3,4,5,6)
nums.foreach(println)
for(n<-nums)println(n)
val reverseNums=nums.reverse
取子集
nums drop 2 take 3
List 可以接受不同的类型元素
val things =List(1,2,"scala",true)
过滤和分区
val amounts = List(Money(10,"USD"),Money(2,"EUR"),Money(20,"GBP"),Money(75,"EUR"),Money(100,"USD"),Money(50,"USD"))
val usd = amounts.filter(x=>x.currency=="USD")
val notusd = amounts.filterNot(x=>x.currency=="USD")
Partition方法 合并了filter and filterNot 的结果
val allamounts=amounts.partition(m=>m.currency=="USD")
返回的结果类型为Tuples(List(Money),List(Money))
scala支持Tuple类型
allamounts._1
allamounts._2
val t=(true,1,false,2)
Map 类似hashmap这样的key,value数据结构
val wallet =Map("USD"->10,"EUR"->2)
wallet("EUR")
如果key不存在,则会报元素不存在的异常,所以安全获取元素的方法是
wallet.get("EUR")
map方法
对集合中的每一个元素都执行,生成新的集合,作用在List上。
对List中的元素进行分类的方法
val sortedAmounts = amounts.groupBy(_.currency)
foldLeft方法
会传递一些状态从一个元素到另一个元素,例如连乘或加。
val productofnums = nums.foldLeft(1){(total,n) =>total*n}
Ranges
表示一个有起始值和结束时的区域
1 to 10
1 util 10
1 to 10 by 3
'a' to 'z'
option some None
如果有值,就是some,没有值就是None
Map.get返回的值就是option[T]
Seq 是List和Vector的父类型,支持迭代。