从名称可知“可扩展的语言”说明scala确实有它的强大之处-可扩展性,故scala应用范围很广,从简单的脚本到构建大型系统。
scala增加的新类型
引入 BigInt类型(从scala.BigInt引入,其实它的来源是java的BigInteger)如下面的例子
def factorial(x:BigInt):BigInt= if(x==0) 1 else x*factorial(x-1) 调用时直接factorial(20)。
scala增加了新的控制结构
引入新的控制结构-actor--并发编程结构,actor是能够实现线程模型上的并发抽象,可以通过彼此间传递消息来实现通信,actor可以执行两种基本操作
消息的发送和接受。发送操作,用惊叹号表示,可以把消息发给actor.如下举例
recipient !msg
发送是异步的,每个actor都有信箱(mailbox)把进入的消息排成队列,actor通过receive代码块处理信箱中收到的消息
receive{
case Msg1=>..........相应的处理1
case Msg2=>.............相应的处理2
}
当信箱中有符合case 消息时将会相应的匹配并处理。
在这里再举一个scala的actor实现校验和(cheksum)计算器服务的简单例子:
actor {
var sum=0
loop{
receive{
case Data(bytes) =>sum+=hash(bytes)
case GetSum(requester) =>requester ! sum
}
}
}
这个actor首先定义一个名为sum的本地变量,并赋初值0,然后就等待在消息循环中,不断的用receive段接受消息,匹配处理
其中requester!sum把当前sum值发回给requester.requester字段嵌入在GetSum消息里,它通常指向创建请求的actor.
是什么让scala有扩展性呢?
其实很简单它是结合面向对象和函数式编程的特点,这些在后面的学习中会体现出它的特点。
scala又是高级的
val nameHasUpperCase=name.exists.(_.isUpperCase) 其中_是站位符,代码看起来
scala是静态类型的
什么是静态类型系统呢?其含义是你可以根据保存和计算的值的类型认定变量和表达式。如若感觉抽象可以参考http://blog.youkuaiyun.com/mycoolx/article/details/6082187
这一小节就简单介绍一下scala的一些特性,具体内容见下章节