在Ruby中,对块

时间:2016-06-04 22:16:10

标签: ruby

作为一个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

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

2 个答案:

答案 0 :(得分:5)

def reverser
  yield.split.map(&:reverse)
end

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

答案 1 :(得分:1)

我发现可以简单地将一个变量分配给" yield"的输出。所以我定义了

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

命令

p reverser {"hello dolly"}

然后导致所需的输出。