2012-05-15 38 views
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 

回答

0

幾個選項。最簡單的辦法就是改變原始字符串:

def create_string(str) 
    str.sub!(/\A/, "This is ") << "\n" 
end 
+0

讓我困惑的部分是:每個字符串是如何連接的?我期望這個塊的結果只是返回最後一個字符串。你能否詳細說明這將如何工作? –

+0

如果您閱讀'#sub!'(http://www.ruby-doc.org/core-1.9.3/String.html#method-i-sub-21)和'<<'的文檔,您會發現它實際上修改了'str'變量,因此除了返回結果之外,原始字符串在傳遞給下一個方法之前已被更改。 – d11wtq

+0

我完全理解這個部分;我不明白的是每行是如何連接的: create_string「some_string」肯定會返回「this is some_string \ n」,但決不會影響create_string「other_string」;這不會將此附加到第一個方法調用產生的字符串中。 我懷疑可以實現這種效果的一種方法是將塊傳遞給字符串:「」.instance_eval(&block),其中每個方法都會修改自我對象。我看到除此之外是否還有其他想法。 –

相關問題