从Scala和Python的“shell”说起

2018-08-06 14:17:18 浏览数 (1)

在《写给Python和Scala的碎碎念》的系列的开篇,让我们从最简单的交互式“shell”开始,一步步来看看Python和Scala的对于同一件事体现出来的设计理念。 · 使用Scala解释器 Scala和Python都可以在shell页面输入scala或者python进入交互页面 。Scala作为一门静态语言,拥有着属于自己的“shell”,可以让你快速的检验一小段Scala代码。Python也拥有着自己的“shell”,使用方式和Scala一样,不同的就是Python还拥有着IPython这样强化过的“shell”。 来试试“shell”带来的方便吧!首先在“shell”里分别输入1 1 scala: scala> 1 1 res0: Int = 2 scala> res0 res1: Int = 2

python: >>> 1 1 2 >>> _ 2 >>> type(_) <class 'int'>

结果有些许不同。 1.在Scala里,一共是输出了一个自动生成的或者是用户自定义的变量名res0,指向计算的结果值,而Python则隐性的使用了单下划线_来指向计算的结果值。由于Scala也是一门纯粹的函数式编程语言,所以如果我们接着输入res0,便会重新使用变量res1,Python则不一样,会重新赋值给_。

2.Scala在结果值里存在了一个冒号和等号,而冒号后面指明了表达式的结果类型Int,这反映了Scala一个特性,那就是类型推断,Python作为一门动态语言,它无需预定义数据类型,在运行时检查数据类型,我们可以通过type(_)发现,它也被自动推断为int了。 3.同样的Scala和Python都输出了结果2。 如果再深入的看看,Scala里的Int和Python的int实际上都是一个类,不同的是Scala的Int是因为Scala提供一个独特的信息隐藏机制,把原本应该写为Scala.Int的简化成了Int(这样的机制应用在Scala绝大部分的数据类型上,比如Boolean),其对应的就是Java的基本类型,而Python的int则是C语言的一个结构体,采用的是long类型,有一些常用的数(工程意义上)在解释器启动之时便实例化后存在缓冲池里(-5到256)。

0 人点赞