4

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

谢谢

4

3 回答 3

7

“做某事的方式不止一种”意味着可以选择按照你想要的方式做某事。这样,无论您来自什么背景,您都可以使用各种编程风格。


for使用vs. 块进行迭代

您可以遍历一系列类似的东西。这是非常基本的,如果您有 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

像往常一样传递参数或使用Hashes

通常,您会像这样传递参数:

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 过度使用的形式。好消息是您现在有了命名参数。当你经过它们时,你会更容易记住它们的用途。

于 2011-06-19T08:35:36.880 回答
4

这意味着许多混乱风格大战和由于细微差异导致的错误,所有这些都以选择自由的名义。

于 2017-07-26T11:41:08.567 回答
1

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

假设您正在一个项目中工作并且您忘记了要使用哪个 API。

方法的名称又是什么?

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

人们可以默认使用 .collect 或者他们可以使用 .map,这与您个人使用的区别不大(我使用 .map,因为它更短)。

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

于 2015-12-02T09:22:59.933 回答