2016-06-09 25 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并没有将变量视为程序的面向对象结构的一部分。只有对象和方法。