【发布时间】:2012-08-28 13:04:15
【问题描述】:
有没有办法在 ruby 中提供与 add-watch 在 clojure 中类似的功能?我正在寻找一种方法将块/proc/lambda 注册为数据结构上的回调,比如哈希,并在哈希状态发生变化时被调用。
【问题讨论】:
-
是的,有一种方法可以提供 Activerecord::Observer 中明显的功能
有没有办法在 ruby 中提供与 add-watch 在 clojure 中类似的功能?我正在寻找一种方法将块/proc/lambda 注册为数据结构上的回调,比如哈希,并在哈希状态发生变化时被调用。
【问题讨论】:
是的,您可以在 Ruby 中执行此操作,但您需要自己构建基础架构或找到可以执行此操作的库。
由于Ruby's "duck" typing,可以为期望哈希实例的方法提供一个看起来、感觉和听起来都像哈希的类实例。接收方法可以把对象当作一个哈希,一切都会好起来的。
同时,您的其他软件将知道它实际上是ObservableHash(或您决定调用的任何名称。)并且您将注册您的回调更改方法等。
这里有一个blog post,它将帮助您开始创建您的ObservableHash。
最后一个提示:一定要实现所有的哈希方法。这样接收它的其他方法将无法区分 observable_hash 和 hash 之间的区别。
据我了解,Rails ActionController#params "hash" 实际上是一个看起来像哈希(但实际上不是)的类实例。查找它的来源以检查它。
【讨论】: