2016-06-09 26 views
1

在Ruby中,我希望在執行期間的任何時候給定變量發生更改時,都會將消息打印到控制檯。如何在Ruby中更改變量時自動登錄到控制檯?

我該如何解決這個問題?我是否應該修改將值分配給變量的方法?

我只能找到這個相關的問題Hook to be called when a variable changes答案建議重新定義#freeze,但這種方法有侷限性。也不是看起來正確。 沒有更好更一致的解決方案嗎?

+1

如果你在一個對象上有一個屬性,你可以通過像'x ='這樣的writer方法來捕獲所有的調用。你有一些示例代碼? – tadman

回答

1

添加您自己的getter/setter。

實施例:

class Person 
    def name 
    @name 
    end 
    def name=(s) 
    @name=s 
    puts 'name has changed!' 
    end 
end 
0

這是不可能的。

無論是set_trace_func還是TracePoint API支持跟蹤變量賦值,並...

我應該猴補丁用於爲變量分配值的方法?

......這種方法不存在。

我猜,Ruby並沒有將變量視爲程序的面向對象結構的一部分。只有對象和方法。