Python 是另一个很好的通用编程语言。从 Python 到 Ruby,你会发现 Ruby 需要学习更多一点的语法。
相似点
Ruby 与 Python 一样的地方……
- 有交互式命令解释器(叫做
irb
)。 - 可以在命令行阅读文档(使用
ri
命令代替 Python 的pydoc
)。 - 没有特殊的行终结符(除了通常的换行符)。
- 与 Python 的三个引号类似,字符串字面量可以跨越多行。
- 方括号用于列表,大括号用于字典(Ruby 中叫做 哈希)。
- 数组操作相同(数组相加,会得到一个长数组;a3 = [a1, a2] 会得到一个二维数组)。
- 对象是强、动态类型。
- 一切皆是对象,变量只是对象的引用。
- 尽管关键字有些许不同,但异常处理方式是一致的。
- 拥有嵌入式文档工具(Ruby 的工具叫 rdoc)。
- 同样好地支持函数式编程,比如:一级类型函数,匿名方法和闭包。
相异点
Ruby 与 Python 不同的地方……
- 字符串是可变类型。
- 可以新建常量(无意改变的变量)。
- 有一些强制习惯用法(例如:类名以大写字母开头,变量以小写字母开头)。
- 只有一种列表容器,且是可变类型。
- 双引号字符串可以转义(像
\t
),有特殊的“替代表达式”语法(不用像"字符串" + "相" + "加"
这样,允许插入 Ruby 表达式结果到其他字符串)。单引号字符串与 Python 的r"原始字符串"
一样。 - 没有什么“新式”或者“旧式”类定义写法。只有一种写法( Python 3 以上的版本没有这个问题,但不能向下兼容 Python 2)。
- 不能直接访问属性。但在 Ruby 中,一切皆方法调用。
- 方法调用的括号是可选的。
- 有 public、private、protected 三种强制的访问控制类型,不像 Python 里面是用变量名加下划线表示。
- “混入(mixins)”替代多重继承。
- 你可以增加或修改内置类的方法。俩语言都允许你随时打开、修改类,但 Python 无法修改内置类,Ruby 无此限制。
true
和false
代替True
和False
(nil
代替None
)。- 判断真值时,只有
false
和nil
当做假值。其余一切皆为真(包括0
、0.0
、""
和[]
)。 elsif
代替了elif
require
替代import
。其他情况,使用相同。- 通常,代码之上(而不是之下的字符文档)的注释用来生成文档。
- 虽然有很多语法糖需要记忆、学习,这也使得 Ruby 非常有趣且有效率。
- 变量设置后无法取消(类似 Python 的
del
声明)。你可以将其重置为nil
让 GC 回收旧的内容,但它仍然存在于符号表中。 yield
关键字作用是不一样的。在 Python 中,它会记住上一次返回时在函数体中调用的位置。外部代码有责任继续执行函数。而在 Ruby 中,yield
会执行作为方法最后一个参数传入的方法,然后立即执行。- Python 支持一种匿名函数,
lambdas
。而 Ruby 支持blocks
,Procs
和lambdas
。