“在Ruby中,有不止一种方法可以做同样的事情” - 这是什么意思?

时间:2011-06-19 08:29:50

标签: ruby syntax programming-languages timtowtdi

如果讨论或非常明显,请随意删除此主题。我来自C#背景,我打算学习Ruby。我读到的所有内容似乎都很有趣。但是我对Ruby的这个基本哲学感到困惑,“有一种方法可以做一件事”。有人可以提供2或3个简单的算术或字符串示例来明确这一点,例如它的语法或逻辑等。

由于

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)

这意味着很多confusionstyle warssubtle differences引起的错误,都是以所选择的自由为名。

答案 2 :(得分:1)

一个有点微不足道的例子是alias / alias_method的使用(另请注意,对于几乎相同的事情,有两种类似的方法,例如alias与alias_method)。

请考虑您正在项目中工作而忘记了要使用的API。

该方法的名称又是什么?

好吧,你可以保持在手头程序的域逻辑中,并继续按照你想要的方式使用它;那么你只需在你的其他程序的主入口点添加一个别名。

人们可以默认使用.collect或者他们可以使用.map,你个人会使用它没什么区别(我使用.map,因为它更短)。

别名的使用对我有帮助,因为几个月后,我常常不记得如何使用某些东西。是的,我可以查一查,但为什么我还要打扰呢?我可以使用别名代替。 (请注意,我确实尝试使用别名和API尽可能简单。)