自从大一接触Python,大量使用到现在,已经敢说很熟悉了。
Ruby比起Python,是更脚本的一门语言。有很多人说python不适合大规模的工程,我相信它们不是在拿python跟ruby比。
Ruby糅合了lisp,perl和smalltalk的特点,虽然后两门语言我并没使用过,但参考ruby可看出一点端倪。
至少在一开始,使用Ruby不太可能像python那样为你带来便利。这是由于语法太复杂(体现在语法糖过多);以及库不像python那样丰富。
然而你仍然可以通过使用Ruby获得极大的乐趣,在你看的明白的前提下,它极具美感。
各种最基础的语法
Python:
for i in list:
pass
Ruby:
for i in list:
pass
list.each do |x|
end
仅就这点而言,ruby可以用和python很像的写法,也可以使用后者这种更ruby的形式。
在后面就会看到,ruby中相当多的代码都采取了后面这种形式。
Ruby:
list.each_with_index do |x, index|
end
enumerate和each_with_index都是自己可以实现的函数。
从个人角度而言,更喜欢后者这种写法,因为它用起自动补全更方便。
Ruby:
10.times do |x|
end
1.upto(10) do |x|
end
在固定循环次数的代码中,ruby比python漂亮地多,而且在代码层面没有引入额外的因素
(一个1..10的list)。
Ruby:
"%d %d" % [1,2]
"#{a} #{b}"
此处python和ruby都可以采用类似C中sprintf的方式格式化。
同时python提供了类似C#的格式化方式。我很少使用,不是很清楚它比起前一种有何优势。
ruby另外提供的是类似php和perl的语法,使用中感觉更明晰和方便。
Ruby:
def a(x)
x
end
可以看到,Ruby采用了函数式编程语言中常见的,将最后一个求值的表达式作为函数求值结果的形式。
这提供了很大的灵活性,新出现的类C++语言Rust也采取了这种形式。
Ruby:
/[Rr]uby/ === "ruby"
/[Rr]uby/ =~ "ruby"
case "ruby"
when /[Rr]uby/ then 1
when /ruby/, /Ruby/ then 2
end
a = /ruby/.match("ruby")
继承自perl的风格,ruby的正则表达式是一个内嵌的语法而非通过包导入的字符串处理引擎。
且通过”===”, “=~”等操作符,灵活地完成正则表达式的匹配和处理,比python强出太多。
Ruby:
s = "abs"
s["a"]
s[/[aA]b/]
Ruby的风格非常简洁,然而对于第一次接触的人而言有那么点难以理解
Ruby:
`ls -al`
从这个角度看,ruby能以很类似shell脚本的方式执行命令。
当真的需要定制更复杂的选项时,便可以像python那样以更复杂的方式调用。