我想向 Ruby 数组添加回调函数之类的东西,这样当将元素添加到该数组时,就会调用该函数。
我能想到的一件事是重写所有方法(如
有更简单的解决方案吗?
以下代码仅调用size_changed
当数组大小发生更改并且传递数组的新大小时挂钩:
a = []
class << a
Array.instance_methods(false).each do |meth|
old = instance_method(meth)
define_method(meth) do |*args, &block|
old_size = size
old.bind(self).call(*args, &block)
size_changed(size) if old_size != size
end if meth != :size
end
end
def a.size_changed(a)
puts "size change to: #{a}"
end
a.push(:a) #=> size change to 1
a.push(:b) #=> size change to 2
a.length
a.sort!
a.delete(:a) #=> size change to 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)