2011-03-22 59 views
2

我的簡單嘗試重新定義實例方法實例方法不工作紅寶石 - 重新定義工作不

class File 
    alias_method :old_atime, :atime 
    def atime(*args) 
    puts "helllllo" 
    old_atime(*args) 
    end 
end 


f = File.new("C:\\abc.txt","w") 
puts f.atime 

任何想法,爲什麼?

我試圖每次打印「helllllo」文件#atime被調用。即使alias old_atime atime不起作用。

我在這裏做錯了嗎?

回答

1

上面的代碼完美地工作,因爲它應該是。把「helllllo」寫入「helllllo」到你打開的文件中。放在寫入文件實例的內部。

只需撥打電話f.close並在文本編輯器中打開文件。你可以看到內容。

+0

哦,我的!不要在控制檯中顯示「helllo」?我能做些什麼來使其寫入控制檯? – RubyDosa 2011-03-22 13:46:19

0

是的,Ramesh是正確的。試試這個:

class File 
    alias_method :old_atime, :atime 
    def atime(*args) 
    Kernel.puts "helllllo" # <---- Kernel method 
    old_atime(*args) 
    end 
end 


f = File.new("C:\\abc.txt","w") 
puts f.atime 

問題是'puts'是在文件中定義的寫入文件。除非在更具體的範圍中定義,否則您需要使用內核。

+0

非常感謝clearup,Ruby很奇怪! ಠ_ಠ – RubyDosa 2011-03-22 13:59:32

0

這應該工作正常,但IO#puts寫入IO對象本身, STDOUT。換句話說,它正在寫入文件。

呼叫f.atime幾次,然後內irbf.close,你應該看到它的打印helllllo爲每次調用atime文件。

要打印到標準輸出,您可以使用$stdout.putsKernel.puts