Python 也是一种非常棒的通用编程语言。从 Python 转到 Ruby,你会发现 Ruby 的语法比 Python 多一些。
相似之处
与 Python 一样,在 Ruby 中…
- 有一个交互式提示符(称为
irb
)。 - 你可以在命令行中阅读文档(使用
ri
命令而不是pydoc
)。 - 没有特殊的行终止符(除了通常的换行符)。
- 字符串字面量可以跨越多行,就像 Python 的三引号字符串一样。
- 方括号用于列表,大括号用于字典(在 Ruby 中称为“哈希表”)。
- 数组的工作方式相同(将它们加在一起会形成一个长数组,但像这样组合它们
a3 = [ a1, a2 ]
会得到一个包含数组的数组)。 - 对象是强类型和动态类型。
- 一切都是对象,变量只是对对象的引用。
- 虽然关键字略有不同,但异常的工作方式大致相同。
- 你拥有嵌入式文档工具(Ruby 的称为 rdoc)。
- 对函数式编程有很好的支持,包括一等函数、匿名函数和闭包。
不同之处
与 Python 不同,在 Ruby 中…
- 字符串是可变的。
- 你可以创建常量(你不想改变其值的变量)。
- 有一些强制的命名约定(例如,类名以大写字母开头,变量名以小写字母开头)。
- 只有一种列表容器(数组),它是可变的。
- 双引号字符串允许转义序列(如
\t
)和特殊的“表达式替换”语法(允许你将 Ruby 表达式的结果直接插入其他字符串中,而无需"add " + "strings " + "together"
)。单引号字符串类似于 Python 的r"raw strings"
。 - 没有“新式”和“旧式”类。只有一种。 (Python 3+ 没有这个问题,但它与 Python 2 不完全向后兼容。)
- 你永远不会直接访问属性。在 Ruby 中,所有操作都是方法调用。
- 方法调用中的括号通常是可选的。
- 有
public
、private
和protected
来强制访问权限,而不是 Python 的_voluntary_
下划线__convention__
。 - 使用“mixin”而不是多重继承。
- 你可以添加或修改内置类的的方法。两种语言都允许你随时打开和修改类,但 Python 阻止修改内置类,而 Ruby 则没有。
- 你拥有
true
和false
,而不是True
和False
(以及nil
而不是None
)。 - 在进行真值测试时,只有
false
和nil
会被评估为假值。其他所有值都为真(包括0
、0.0
、""
和[]
)。 - 使用
elsif
而不是elif
。 - 使用
require
而不是import
。除此之外,用法相同。 - 用于生成文档的是在代码上方的普通风格注释(而不是代码下方文档字符串)。
- 有一些快捷方式,虽然需要你记住更多内容,但你很快就会学会它们。它们让 Ruby 变得有趣且高效。
- 一旦变量被设置,就无法取消设置(类似于 Python 的
del
语句)。你可以将变量重置为nil
,允许旧内容被垃圾回收,但只要变量在作用域内,它就会保留在符号表中。 - 关键字
yield
的行为有所不同。在 Python 中,它会将执行返回到函数调用外部的作用域。外部代码负责恢复函数。在 Ruby 中,yield
会执行作为最后一个参数传递的另一个函数,然后立即恢复。 - Python 只支持一种匿名函数,即 lambda,而 Ruby 包含块、Proc 和 lambda。