2012-08-15 18 views

回答

18

生成器實現了一個版本的method_missing,增加了該方法調用的名稱給出標籤。

假設您正在玩irb(或rails的控制檯),irb在您評估表達式(例如Builder::XmlMarkup.new)時的默認行爲是對其調用inspect,以便生成一個字符串以顯示給您。在建設者的情況下,inspect不是通常的紅寶石inspect方法 - 它貫穿至method_missing並添加標籤。

這隻會在交互式使用ruby時纔會發生。你可以做的東西一樣

xml = Builder::XmlMarkup.new; false 

這裏表達的結果是false所以IRB電話inspect上,獨自離開你的生成器對象。

繼續這樣做可能會很尷尬。如果你

xml = Builder::XmlMarkup.new; false 
def xml.inspect; target!; end 

然後xml仍然是當IRB檢查可顯示其內容的生成器對象。您將無法創建名爲inspect(除使用tag!之外的標籤),但這通常會帶來很小的不便。

+2

不能得到這個:-( – lemon 2012-12-17 08:08:04

+0

是的同樣在這裏工作,它仍然顯示檢查元素 – MXV 2013-10-17 01:43:17

+0

你必須要小心,你從來沒有讓IRB嘗試並顯示構建器 – 2013-10-17 10:45:30

3

如果您仍然希望看到的輸出:

xml = Builder::XmlMarkup.new; xml.target! 
相關問題