ruby 在实例变量级别的红宝石中的观察者。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 在实例变量级别的红宝石中的观察者。相关的知识,希望对你有一定的参考价值。

module Watcher

    # Ensure compatibility.
    def self.included( mod )
        mod.extend( self )
    end

    # Declare a watcher. The block or lambda will be invoked with argumens of what the value was and now is, in that
    # order.
    def watch( sym, lambda = nil, &block )
        block ||= lambda

        # format variable name
        var = sym.to_s
        var = "@#{sym}" unless var =~ /^@/
        var = var.to_sym

        # declare the methods
        class_eval %Q{
            define_method( sym ){ instance_variable_get( var ) }
            define_method("#{sym}="){|v|
                block.call(
                    instance_variable_get( var ),
                    instance_variable_set( var, v )
                )
            }
        }
        sym
    end
    module_function :watch
end

以上是关于ruby 在实例变量级别的红宝石中的观察者。的主要内容,如果未能解决你的问题,请参考以下文章