如果已讨论或非常明显,请随意删除此主题。我来自 C# 背景,我打算学习 Ruby。我读到的关于它的一切似乎都很有趣。但我对 Ruby 的基本理念感到困惑,即“做一件事有不止一种方法”。有人可以提供 2 或 3 个简单的算术或字符串示例来说明这一点,例如关于语法或逻辑等。
谢谢
如果已讨论或非常明显,请随意删除此主题。我来自 C# 背景,我打算学习 Ruby。我读到的关于它的一切似乎都很有趣。但我对 Ruby 的基本理念感到困惑,即“做一件事有不止一种方法”。有人可以提供 2 或 3 个简单的算术或字符串示例来说明这一点,例如关于语法或逻辑等。
谢谢
“做某事的方式不止一种”意味着可以选择按照你想要的方式做某事。这样,无论您来自什么背景,您都可以使用各种编程风格。
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
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 过度使用的形式。好消息是您现在有了命名参数。当你经过它们时,你会更容易记住它们的用途。
一个有点微不足道的例子是使用 alias/alias_method(另请注意,几乎相同的事情有两种类似的方法,例如 alias 与 alias_method)。
假设您正在一个项目中工作并且您忘记了要使用哪个 API。
方法的名称又是什么?
好吧,您可以只停留在手头程序的域逻辑中,并继续以您想要的方式使用它;那么您将只需在其他程序的主入口点添加一个别名。
人们可以默认使用 .collect 或者他们可以使用 .map,这与您个人使用的区别不大(我使用 .map,因为它更短)。
别名的使用帮助了我,因为几个月后,我经常不记得如何使用某些东西。是的,我可以查一下,但我为什么还要麻烦呢?我可以只使用别名。(请注意,我确实尝试使用别名和 API 尽可能简单。)