Perl 很棒。Perl 的文档很棒。Perl 社区……也很棒。对于那些渴望从一开始就内置优雅面向对象特性的 Perl 程序员来说,Ruby 可能会适合你。
相似之处
与 Perl 一样,在 Ruby 中,…
- 你有一个包管理系统,有点像 CPAN (尽管它被称为 RubyGems)。
- 正则表达式是内置的。尽情享用吧!
- 有相当多的常用内置函数。
- 括号通常是可选的。
- 字符串的工作方式基本相同。
- 有一种通用的定界字符串和正则表达式引用语法,类似于 Perl 的。它看起来像
%q{这个}
(单引号),或者%Q{这个}
(双引号),以及%w{这个 用于单引号的单词列表}
。你可以根据喜好%Q|使用|
%Q(其他)
%Q^分隔符^
。 - 你有双引号式的变量插值,尽管它
"看起来#{像}这样"
(你可以把任何 Ruby 代码放在#{}
里面)。 - Shell 命令扩展使用
`反引号`
。 - 你有嵌入式文档工具 (Ruby 的叫做 rdoc)。
不同之处
与 Perl 不同,在 Ruby 中,…
- 你没有像 Perl 那样的上下文相关规则。
- 变量与它引用的对象不是同一个东西。相反,它始终只是对对象的引用。
- 虽然
$
和@
有时用作变量名的第一个字符,但它们不是表示类型,而是表示作用域 ($
表示全局,@
表示对象实例,而@@
表示类属性)。 - 数组字面量用方括号而不是圆括号表示。
- 组合其他列表的列表不会将它们扁平化为一个大列表。相反,你会得到一个数组的数组。
- 它是
def
而不是sub
。 - 每行末尾不需要分号。顺便说一句,你可以使用
end
关键字来结束函数定义、类定义和 case 语句等。 - 对象是强类型的。如果你需要在类型之间转换,你需要手动调用
foo.to_i
、foo.to_s
等。 - 没有
eq
、ne
、lt
、gt
、ge
和le
。 - 没有菱形操作符 (
<>
)。通常使用IO.some_method
来代替。 - 胖箭头
=>
仅用于哈希字面量。 - 没有
undef
。在 Ruby 中,你有nil
。nil
是一个对象(像 Ruby 中的其他任何东西一样)。它与未定义的变量不同。如果你把它当作布尔值,它会评估为false
。 - 在测试真值时,只有
false
和nil
会评估为假值。其他所有值都为真(包括0
、0.0
和"0"
)。 - 没有 PerlMonks。虽然 ruby-talk 邮件列表是一个非常有用的地方。