为什么Scala是可扩展的?

Posted 老梁Scalable

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Scala是可扩展的?相关的知识,希望对你有一定的参考价值。

为什么Scala是可扩展的?

为什么Scala是可扩展的?

这个问题没有标准答案。从我的学习经验来看至少有三方面可以跟大家分享一下。


第一、Scala的创造能力,使用Scala语言可以很容易(相较其它语言)的创造出新的控制结构,形成DSL(Domain Specific Language)。举两个例子证明,请看下面两个代码片段:


为什么Scala是可扩展的?


为什么Scala是可扩展的?


第一个是Scala的测试框架scalatest的一段测试用例,这段代码读起来更有点像英文阅读理解,而不是读一段晦涩的代码。


第二个代码片段是akka中actor发送消息的语法,感叹号“!”在这里是在说“嘿,actor请注意了,我(sender)要发送给你消息了,请注意接收!”


第二、Scala的改变能力,看如下代码:

为什么Scala是可扩展的?

假设跟你同组的同事写了一个类DefaultSayHello,可以用英文打招呼,例如“Hi, Edwin”。用的时候你给实例设置了一个中文名,比如“老梁”,这时输出“Hi,老梁”,这时候你觉着中文名字应该用中文打招呼才对,但是又不能修改其他人的代码,那该怎么办呢?


答案你已经看到了,就是创建对象的时候混入特质,通过特质对原类行为进行了改造,改造完之后输出为“你好,老梁”。这意味没有改变原类代码却改变了原类的行为!


第三,Scala的增强能力,我们看如下代码:



解释:3是个整型类型,自然没有chat方法,而我们又无法修改Int的实现,这时我们使用隐式转换,将整型3转换为LoquaciousInt,就有了chat的能力。当然这个代码还可以再进一步简化为:



这就是隐式类。


我们看到通过隐式类我们能赋予原library中的类以更多的行为能力,是不是该感叹一下Scala的美妙~


接下来一篇的内容,我们再进一步挖掘一下,是什么使Scala拥有如此可伸展的特性。


以上是关于为什么Scala是可扩展的?的主要内容,如果未能解决你的问题,请参考以下文章

scala-从入门到精通

Lisp宏和scala宏有什么区别?

Scala 第一个Scala程序

1.Scala-概述-安装配置

rcscalablcs是啥意思

vs code 安装Scala