ruby - 将回调函数添加到 Ruby 数组以在添加元素时执行某些操作

标签 ruby arrays callback

我想向 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/

相关文章:

php - php中的回调函数和异常

c# - 从 C# 到 C++ 的回调函数

javascript - 如何在 if 语句中使用 jquery 回调函数?

ruby-on-rails - 如果能?在 Ruby on Rails 中

php - 在php中获取json对象而不是json数组

ruby - 三元运算符语法错误

ios - 空数组导致我的应用程序在 Swift 中崩溃

php - mysql_fetch_array() 不显示所有结果

python - 如何在 Ruby 和 Python 之间传递基本对象?

Ruby:如果每个条件内都有条件