从 Python 到 Ruby

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 无此限制。
  • truefalse 代替 TrueFalsenil 代替 None)。
  • 判断真值时,只有 falsenil 当做假值。其余一切皆为真(包括 00.0""[])。
  • elsif 代替了 elif
  • require 替代 import。其他情况,使用相同。
  • 通常,代码之(而不是之下的字符文档)的注释用来生成文档。
  • 虽然有很多语法糖需要记忆、学习,这也使得 Ruby 非常有趣且有效率。
  • 变量设置后无法取消(类似 Python 的 del 声明)。你可以将其重置为 nil 让 GC 回收旧的内容,但它仍然存在于符号表中。
  • yield 关键字作用是不一样的。在 Python 中,它会记住上一次返回时在函数体中调用的位置。外部代码有责任继续执行函数。而在 Ruby 中,yield 会执行作为方法最后一个参数传入的方法,然后立即执行。
  • Python 支持一种匿名函数,lambdas。而 Ruby 支持 blocksProcslambdas