0
我想知道,如果有人(像我這樣=])可以創建一些方法做這樣的事情:Ruby塊:將每個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
那麼這將返回
puts x #=> This is some_string\n This is other_string\n This is third_string
讓我困惑的部分是:每個字符串是如何連接的?我期望這個塊的結果只是返回最後一個字符串。你能否詳細說明這將如何工作? –
如果您閱讀'#sub!'(http://www.ruby-doc.org/core-1.9.3/String.html#method-i-sub-21)和'<<'的文檔,您會發現它實際上修改了'str'變量,因此除了返回結果之外,原始字符串在傳遞給下一個方法之前已被更改。 – d11wtq
我完全理解這個部分;我不明白的是每行是如何連接的: create_string「some_string」肯定會返回「this is some_string \ n」,但決不會影響create_string「other_string」;這不會將此附加到第一個方法調用產生的字符串中。 我懷疑可以實現這種效果的一種方法是將塊傳遞給字符串:「」.instance_eval(&block),其中每個方法都會修改自我對象。我看到除此之外是否還有其他想法。 –