Ruby块:将过程中每一行的结果存储到一个变量中?

Ruby块:将过程中每一行的结果存储到一个变量中?,ruby,eval,block,proc,Ruby,Eval,Block,Proc,我想知道是否有人(比如我自己=])可以创建一些方法来执行以下操作: x = magic_method do create_string "some_string" # a method that returns "This is <some string>\n " create_string "other_string" create_string "third_string" end 有几种选择。最简单的方法是对原始字符串进行变异: def create_string

我想知道是否有人(比如我自己=])可以创建一些方法来执行以下操作:

x = magic_method do
  create_string "some_string" # a method that returns "This is <some string>\n "
  create_string "other_string"
  create_string "third_string"
end

有几种选择。最简单的方法是对原始字符串进行变异:

def create_string(str)
  str.sub!(/\A/, "This is ") << "\n"
end
def创建_字符串(str)

str.sub!(/\A/,“This is”)让我困惑的是:每个字符串是如何连接的?我希望这个块的结果只返回最后一个字符串。如果你阅读了
#sub!的文档,你能详细说明一下这是如何工作的吗()和
我完全理解那部分;我不明白的是每一行是如何连接的:create_string“some_string”肯定会返回“this is some_string\n”,但它不会影响create_string“other_string”;这不会将其附加到第一个方法调用产生的字符串中。我怀疑可以实现这种效果的一种方法是将块传递给字符串:“.instance_eval(&block)”,其中每个方法都修改self对象。我想知道是否还有其他想法。请记住,任务的重点是返回传递给函数的块内所有方法调用的串联,而不是简单地修改字符串。然后该方法将对该字符串执行某些操作。如果我遗漏了什么,请告诉我。啊,我明白你的意思。这在ruby中是不可能的。
def create_string(str)
  str.sub!(/\A/, "This is ") << "\n"
end