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`。
