在Ruby中,对块的内容执行函数

在Ruby中,对块的内容执行函数,ruby,Ruby,作为Ruby编程练习,我想制作一个函数“reverser”,它可以反转字符串中的每个单词。但是,它应该对块的内容而不是参数使用运算符。所以 reverser {"hello dolly"} 应该返回“olleh yllod”。我知道如何制作类似的方法: def reverse_words(string) words=string.split() words.map! {|word| word.reverse} words.join(" ") end 但是,该方法应该对块的内容进行

作为Ruby编程练习,我想制作一个函数“reverser”,它可以反转字符串中的每个单词。但是,它应该对块的内容而不是参数使用运算符。所以

reverser {"hello dolly"}
应该返回“olleh yllod”。我知道如何制作类似的方法:

def reverse_words(string)
  words=string.split()
  words.map! {|word| word.reverse}
  words.join(" ")
end
但是,该方法应该对块的内容进行操作,而不是对“正常”参数进行操作。到目前为止,我得到了这个:

def reverser(&prc)
  yield.reverse
end

然而,这只会颠倒一个单词,而不是句子中的每个单词。我真的不确定如何获得以这种方式作为参数传递的块内容的“句柄”。有什么想法吗?

我发现可以简单地给“收益率”的输出分配一个变量。所以我定义

def reverser
  str=yield
  words=str.split()
  words.map! {|word| word.reverse}
  words.join(" ")
end
命令

p reverser {"hello dolly"}

然后导致所需的输出。

我发现可以简单地为“产量”的输出分配一个变量。所以我定义

def reverser
  str=yield
  words=str.split()
  words.map! {|word| word.reverse}
  words.join(" ")
end
def reverser
  yield.split.map(&:reverse)
end

reverser {"hello dolly"}
 => ["olleh", "yllod"] 
命令

p reverser {"hello dolly"}

然后导致所需的输出。

为什么?你为什么要做这样的事?还有,你的标题不准确。您希望对块的结果而不是其内容执行函数——前者是可能的;后者(很可能)不是。为什么?你为什么要做这样的事?还有,你的标题不准确。您希望对块的结果而不是其内容执行函数——前者是可能的;后者(很可能)不是。
def reverser
  yield.split.map(&:reverse)
end

reverser {"hello dolly"}
 => ["olleh", "yllod"]