我想向 Ruby 数组添加回调函数之类的东西,以便在将元素添加到该数组时调用此函数。 我能想到的一件事是覆盖所有方法(如 <<、=、插入、...)并从那里调用该回调。
有没有更简单的解决方案?
最佳答案
以下代码仅在数组大小发生变化时调用 size_changed
Hook ,并向其传递数组的新大小:
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
关于ruby - 将回调函数添加到 Ruby 数组以在添加元素时执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060630/