如果讨论或非常明显,请随意删除此主题。我来自C#背景,我打算学习Ruby。我读到的所有内容似乎都很有趣。但是我对Ruby的这个基本哲学感到困惑,“有一种方法可以做一件事”。有人可以提供2或3个简单的算术或字符串示例来明确这一点,例如它的语法或逻辑等。
由于
答案 0 :(得分:7)
“不止一种做事方式”意味着可以选择以您想要的方式做某事。这样你就可以使用各种编程风格,无论你来自哪个背景。
for
与块你可以迭代一系列的事情。这是非常基础的,如果你来自Java背景,这感觉很自然。
for something in an_array
print something
end
类似Ruby的方式如下:
an_array.each do |something|
print something
end
第一种是一种众所周知的做事方式。第二个是使用blocks,这是一个非常强大的概念,你可以在许多Ruby习语中找到它。基本上,数组知道如何迭代其内容,因此您可以修改它并添加如下内容:
an_array.each_with_index do |something, index|
print "At #{index}, there is #{something}"
end
你也可以这样做,但是现在你看到上面的一个看起来更容易了:
index = 0
for something in an_array
print "At #{index}, there is #{something}"
index += 1
end
Hash
es 通常情况下,你会像这样传递参数:
def foo(arg1, arg2, arg3)
print "I have three arguments, which are #{arg1}, #{arg2} and #{arg3}"
end
foo("very", "easy", "classic")
=> "I have three arguments, which are very easy and classic"
但是,您也可以使用Hash来执行此操作:
def foo(args)
print "I have multiple arguments, they are #{args[:arg1]}, #{args[:arg2]} and #{args[:arg3]}"
end
foo :arg1 => "in a", :arg2 => "hash", :arg3 => "cool"
=> "I have three arguments, which are in a hash and cool"
第二种形式是Ruby on Rails过度使用的形式。好的是你现在有了命名参数。当你传递它们时,你会更容易记住它们的用途。
答案 1 :(得分:2)
这意味着很多confusion,style wars和subtle differences引起的错误,都是以所选择的自由为名。
答案 2 :(得分:1)
一个有点微不足道的例子是alias / alias_method的使用(另请注意,对于几乎相同的事情,有两种类似的方法,例如alias与alias_method)。
请考虑您正在项目中工作而忘记了要使用的API。
该方法的名称又是什么?
好吧,你可以保持在手头程序的域逻辑中,并继续按照你想要的方式使用它;那么你只需在你的其他程序的主入口点添加一个别名。
人们可以默认使用.collect或者他们可以使用.map,你个人会使用它没什么区别(我使用.map,因为它更短)。
别名的使用对我有帮助,因为几个月后,我常常不记得如何使用某些东西。是的,我可以查一查,但为什么我还要打扰呢?我可以使用别名代替。 (请注意,我确实尝试使用别名和API尽可能简单。)