Ruby-为什么使用块作为参数?
我很难理解ruby中的块与过程。我的基本想法是,proc是一种保存为对象的方法,您可以重复调用它,而不必反复编写相同的代码行 我的问题在于在方法中接受块作为参数Ruby-为什么使用块作为参数?,ruby,block,proc,Ruby,Block,Proc,我很难理解ruby中的块与过程。我的基本想法是,proc是一种保存为对象的方法,您可以重复调用它,而不必反复编写相同的代码行 我的问题在于在方法中接受块作为参数 家庭作业问题非常简单 编写一个方法,该方法接受一个块作为参数,并反转字符串中的所有单词 下面是他们正在寻找的答案 def reverser(&prc) sentence = prc.call words = sentence.split(" ") words.map { |word| word.reverse }.j
家庭作业问题非常简单 编写一个方法,该方法接受一个块作为参数,并反转字符串中的所有单词 下面是他们正在寻找的答案
def reverser(&prc)
sentence = prc.call
words = sentence.split(" ")
words.map { |word| word.reverse }.join(" ")
end
我有两个问题-
1你怎么称呼这个方法,因为如果我把
print reverser("Hello")
我收到一个错误“参数数量错误(给定1,应为0)”
其次,为什么不写下面的方法呢?编写占用块的方法有什么好处?
def reverser(string)
string.split.map{|x| x.reverse}.join(" ")
end
print reverser { "Hello" }
print reverser do
"Hello"
end
words.map { |word| word.reverse }.join(" ")
若不能将块传递给map,那个么就必须定义该函数并将其传递到某个地方,然后命名该函数。这是没有效率的
让我们将此块更改为有效,以便它仅在以大写字母开头时反转单词
words.map do |word|
if word[0] =~ /[A-Z]/
word.reverse
else
word
end.join(" ")
如果没有块,您需要定义该函数,而在任何其他地方都不需要该函数并调用它。那就是没有效率。
这就是它的样子
def reverse_if_starts_with_capital_letter(word)
if word[0] =~ /[A-Z]/
word.reverse
else
word
end
end
# not sure if this syntax would work, just demonstrates idea
words.map(&reverse_if_starts_with_capital_letter)
“如何调用此方法”:
reverser{“Hello”}
“家庭作业问题非常简单。”–家庭作业问题非常愚蠢,因为它根本无法证明块的有用性。@JörgWMittag你有一个有用的好例子吗?任何帮助都将不胜感激,因为在过去的6个月里,我一直在自学。事实上,您在reverser
的实现中已经使用了一个块,而可枚举的
方法(大多数都使用了一个块)都是很好的例子。这让我大吃一惊。我已经被困了两天,试图了解发生了什么,这让我更好地理解了这个概念。