Smalltalk
和smalltalk一样,Ruby也是动态的纯面向对象的语言。你不需要静态的指定数据类型,所有东西都是对象。而且,两者都有垃圾收集机制。
在Smalltalk中,流程控制语句也都是通过给对象发送消息来完成的,但有时候这使得程序难以阅读理解。而Ruby中的控制流程结构就显得保守一些,而且也就自然、容易理解一些。
说实话,Smalltalk为何物,我一无所知。以上废话全摘自Ruby作者之文。
Perl
Ruby和其它两种P姓语言:Perl和Python都被分类为脚本语言(scripting language)。原因有三:
1.它们都支持快速开发周期(编辑-运行-编辑),不需要编译。
2.它们为了提高你的效率,尽量减少你的代码数量,比如,你不需要定义类型,至少省了敲好几个键。
3.很多很强的内置库支持对文本,文件,网络的操作。
也许,因为是脚本语言,很多人认为速度慢,不能使用在大型项目中。然而,也许对csh这样的来说是吧,但是,对于Ruby以及Perl等来说,却不太适合了。也许,称Ruby为“动态面向对象语言”比“脚本语言更合适”。
不像Perl,Ruby是完完全全的面向对象语言,OO不是装饰品。Ruby用的$,@,%等符号比较少,这些符号对于屏幕小眼近视的我来说很容易混。Ruby没有太多的对上下文环境的依赖,很少的隐式转换。
比如,取得一个字符串或者数组的长度方法如下:
Ruby:
a = "abc" a.length # => 3 a = [1,2,3] a.length # => 3 |
非常简单,而在Perl中,则麻烦一些:
$a = "abc"; length($a); # => 3, it's OK @a = (1,2,3); length(@a); # => 1, not as expected scalar(@a); # => 3, $a = [1,2,3]; # length($a); # => 16, not as expected scalar(@$a); # => 3
|
在Ruby中很多的Perl函数都被包装成类库了,所以有时候Ruby程序看起来也像简单的Perl程序。Ruby继承了Perl的很多优点,当然没有把那些烦人的东西也引入,所以,如果你熟悉Perl,也许有会喜欢Ruby。
Python
下面不纠缠Perl了,来说说Python。
先来说说抱怨声:为什么非要用缩进来确定代码结构,有了list还要tuple干什么?为什么所有的value都不是实例?等等问题在Ruby中可以不必烦恼了,Ruby的目的是使程序比Python的短小精练。
来看的一个问题就是谁更面向对象,在Ruby中,取得字符串的长度如下:
irb(main):010:0> a="1234" => "1234" irb(main):011:0> a.length => 4 irb(main):012:0>
|
而在Python中,则要更面向过程一些了:
length(a) |
现在我对 Python 不太熟悉,不好总结,等等过些日子再更新。