scala 第一课

clip_image001

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的父类型,支持迭代。

posted on 2016-02-28 11:20  tneduts  阅读(166)  评论(0编辑  收藏  举报

导航