向 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 数组添加回调函数,以便在添加元素时执行某些操作 的相关文章

  • 如何将枚举作为字符串存储到rails中的数据库中

    如何在 ruby 中创建迁移 其中默认值是字符串而不是整数 我想将枚举存储到数据库中 但我不想将其存储为整数 因为这样对于另一个应用程序来说没有意义想要使用同一张桌子 我该怎么做default female 代替default 0 clas
  • 如何 free() 由 malloc() 分配的结构数组?

    我一直在研究一个使用结构作为字符串存储的项目 我声明了一个由 char 类型成员组成的结构 struct datastore1 char name 50 char address 50 char email 50 char number 5
  • Ruby:创建日期范围

    我正在寻找一种优雅的方式来制作一系列日期时间 例如 def DateRange start time end time period end gt gt results DateRange DateTime new 2013 10 10 1
  • 查询,无法选择列数

    Tag joins quote tags group quote tags tag id order count desc select count tags id AS count tags id tags name Build quer
  • Ruby on Rails:有关 validates_presence_of 的问题

    我的基于 ActiveRecord 的模型中有一个关系 如下所示 belongs to foo 我的模型应该始终在其中定义 foo 才能有效 我的问题是 当使用 validates presence 时 使用哪一个是合适的 validate
  • Ruby 自定义字符串排序

    输入字符串 1654AaBcDddeeFF 输出字符串 1456acddeeABDFF 我尝试过的代码 test array 1654AaBcDddeeFF each byte do char test array lt lt char e
  • 液体标记图过滤器示例

    我可以举一个有关 Liquid 贴图过滤器如何工作的通用示例吗 似乎没有这方面的文档 映射过滤器是 映射 收集给定属性上的数组 但如何确定该属性 这个例子存在 液体模板贴图过滤器 https stackoverflow com questi
  • Mac + Ruby:无法访问 Socket 的 ioctl?怎么修?

    一天中的好时光 红宝石代码 def hw address iface sock Socket new Socket AF INET Socket SOCK DGRAM 0 buf iface pack a16h16 sock ioctl S
  • 从哈希中删除 nil 值

    我希望从哈希中删除具有nil value article是一个存储每篇文章的类 并且attributes方法将文章存储为散列 预期结果 articles results author null title Former bar manage
  • Rails3 has_many 关系中子项计数的范围

    尝试在rails3中做一个范围 book has many chapters 我想要 range long 返回超过 10 章的书籍 如何最好地构建这个范围 不使用计数器缓存 thanks 这应该会让你继续 class Book scope
  • 从由空格分隔的单个输入整数列表创建二维数组

    我正在解决一些问题geeksforgeeks我遇到了一个特定的问题 其中在测试用例中提供了输入 如下所示 2 2 denotes row column of the matrix 1 0 0 0 all the elements of th
  • Nokogiri 相当于 jQuery Closest() 方法,用于在树中查找第一个匹配的祖先

    jQuery 有一个可爱的方法 虽然命名有些错误 称为最接近 http api jquery com closest 它会沿着 DOM 树向上寻找匹配的元素 例如 如果我有这样的 HTML table src foo tr td Yay t
  • 为什么 C# ProcessStartInfoRedirectStandardOutput 会导致 xcopy 进程失败

    这有点痛苦 因为我现在没有代码 但我会尽力解释 我有一个简单的 C 应用程序 它启动 Ruby 脚本 它还执行一些其他操作 因此它生成一个批处理文件并执行该文件 我正在使用 C 进程对象并设置以下内容 重定向标准输出 true 重定向标准错
  • 使用 plistBuddy 获取值数组

    var keychain access groups declare a val usr libexec PlistBuddy c Print var sample plist echo val echo val 0 Ouput Array
  • 这应该被称为对象切片的某种特殊情况吗?

    假设我有课Derived派生自类Base然而sizeof Derived gt sizeof Base 现在 如果分配一个数组Derived像这样 Base myArray new Derived 42 然后尝试访问n第一个对象使用 doS
  • IndexError:索引 10 超出尺寸为 10 的轴 0 的范围

    我正在以数字方式为 x 网格和 x 向量以及时间网格设置网格 但我再次设置了一个数组x 位置 只能在 0 到 20 之间并且t 时间 将从 0 到 1000 以便求解热方程 但每次我想要 例如 我将步数设置为 10 时 都会收到错误 Tra
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • 如何检查用户电子邮件的唯一性并将结果传递给 jQuery?

    我有这个问题 我正在控制器中检查用户电子邮件并发送 json 成功响应 如果已获取 并添加输入的 css 样式 我还需要阻止提交并添加一些消息 这是我的检查电子邮件操作 使用本文 http paydrotalks com posts 45
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配

随机推荐

  • 当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