向 Ruby 数组添加回调函数,以便在添加元素时执行某些操作

2023-12-26

我想向 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(使用前将#替换为@)

向 Ruby 数组添加回调函数,以便在添加元素时执行某些操作 的相关文章

随机推荐

  • 当JProgressBar达到100%时如何使JDialog不可见?

    相关代码段 JProgressBar progress JButton button JDialog dialog Fields of my GUI class progress new JProgressBar JProgressBar
  • 将向量列表转换为数据框

    我正在尝试将向量列表 本质上是多维数组 转换为数据框 但每次尝试都会得到意想不到的结果 我的目标是实例化一个空白列表 用包含有关该循环迭代的信息的向量将其填充到 for 循环中 然后在完成后将其转换为数据帧 gt vectorList lt
  • Android画布路径实时表现

    我想在 15 分钟内绘制 4 或 5 个 实时图表 可视化大量数据 每 30 毫秒一个新值 我正在使用 Path 但当我想要显示超过 20000 个值并平移画布时 它似乎工作得非常慢 并且每秒都变得更糟 我也尝试过使用drawLine 但它
  • “Impact”字体在移动 Chrome 上不起作用

    我已经与 Impact 字体斗争了大约一年了 它应该是一种网络安全字体 但事实并非如此 当我使用标准 Impact 时 它无法在移动平台上运行 如果我使用特定的字体 font face 则不可能在 PC 和 Mac 上获得相同的渲染效果 我
  • 无法迭代二维数组来标准化数据

    我正在尝试标准化我的数据 并且需要迭代训练和测试集 我尝试了不同的方法 但出现此错误list indices must be integers or slices not list 我试过把range and len 但我仍然遇到同样的错误
  • 接口类纯虚信号的连接

    我想连接从接口类派生的某些对象的信号 连接完成于QWidget listenToAnimal AnimalInterface 这不起作用 因为qt metacall is not a member of AnimalInterface an
  • Elasticsearch:嵌套对象的批量更新

    我的文档结构如下 documentID 123 originalFilename Build a Better Post pdf modDate 2017 11 16T18 22 54 48 documentType pdf keySyst
  • Visual Studio 复制项目

    我想复制我的项目 我宁愿不通过添加文件和引用等从头开始执行此操作 请注意 我并不是指复制部署 只是简单的复制 VS中有没有工具可以做到这一点 我用的是VS 2008 Just 从您的项目中选择 项目 导出模板 向导将让您定义 模板名称 模板
  • Dask:定期更新已发布的数据集并从其他客户端提取数据

    我想将数据附加到published dask dataset来自队列 如 redis 然后其他 python 程序将能够获取最新数据 例如每秒 分钟一次 并执行一些进一步的操作 这可能吗 应该使用哪个附加接口 我应该将它加载到pd Data
  • cx_Freeze - 从桌面快捷方式运行 .exe 时出错

    我的 Pygame 应用程序可以完美运行 exe编译后的文件msi在 cx Freeze 中 但是当我从桌面快捷方式运行它时 出现错误 快捷方式目标是正确的 声音文件都在正确的目录中 我都尝试过 wav and ogg文件并降低了比特率等
  • 表达式类型“@lvalue String?”没有更多上下文就含糊不清

    无缘无故地我得到了这个错误表达式类型 lvalue String 没有更多上下文就含糊不清在我的代码中 if textView text takenImage nil userLocation text checkInternet Crea
  • Chrome 信用卡到期自动填充格式

    我在我帮助维护的网站上有一张信用卡登记表 后端编码为采用 MM YY 格式的 2 位数到期月份和 2 位数年份 Chrome 似乎设置为以 MM YYYY 格式应用信用卡信息 因此如果用户存储的 CC 过期日期为 05 2023 它将自动填
  • 由于 getValue 和单元格插入,处理时间可能较长

    我刚刚编写了我的第一个 google apps 脚本 该脚本是从 VBA 移植的 它格式化了一列客户订单信息 感谢您的指导 描述 该代码通过其 前缀来标识州代码 然后将以下名字与姓氏 如果存在 组合起来 然后 它会在姓氏所在的位置写入 订单
  • 如何在WKWebView上加载URL?

    我正在尝试在包含 CSV 文件的 WKWebView 上加载 URL 当我尝试正常加载时 它给了我一个错误 文件格式不受支持 可能已损坏 即使移动 safari 也给我同样的错误 然后我尝试使用 MIME 类型与 WKWebView 的以下
  • 如何使用访问控制允许来源?它只是放在 html head 标签之间吗?

    我一直在读关于Access Control Allow Origin因为它似乎可以有效地允许跨域请求 因为我可以访问外部站点 我的问题是我该如何使用Access Control Allow Origin允许跨域请求 我尝试过这个 别笑 顺便
  • 如何在树枝模板中的变量之间添加空格?

    这是一个非常简单的问题 但我还没有找到答案 这段代码 civilite nom prenom 打印 MRJOHSONBarry 我想在变量之间添加空格 我该怎么做 如果 Civilite nom prenom 不起作用 怎么样 civili
  • 我不断收到类型错误

    好吧 我正在自学 python 类 当我运行代码时 出现以下错误 class Critter object A virtual pet def init self name mood print A new critter has been
  • 使用批处理文件在 Windows 中生成 GUID

    如何在 Windows 中使用命令行运行的批处理文件中生成 GUID Windows SDK 附带了一个名为uuidgen 如果您有 Visual Studio 您将拥有 Windows SDK 并且需要运行Visual Studio 命令
  • WPF - 从 ItemsControl 的 ItemTemplate 内绑定到项目索引?

    有没有办法从 ItemsControl 的 ItemTemplate 中绑定到 ItemIndex 例如
  • 向 Ruby 数组添加回调函数,以便在添加元素时执行某些操作

    我想向 Ruby 数组添加回调函数之类的东西 这样当将元素添加到该数组时 就会调用该函数 我能想到的一件事是重写所有方法 如 有更简单的解决方案吗 以下代码仅调用size changed当数组大小发生更改并且传递数组的新大小时挂钩 a cl