gpt4 book ai didi

ruby - 向继承自 Hash 的 Ruby 类添加类似 'each' 的方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:00:03 26 4
gpt4 key购买 nike

我想创建一个行为类似于标准 Ruby Hash 的类,并加入一些额外的访问方法。例如,给定:

class SpecificHash < Hash
def initialize
(1..20).each do |num|
self[num] = "value #{num.to_s}"
end
end
end

我可以通过标准的 each 调用获得所有键值对的完整列表:

sh = SpecificHash.new
sh.each { |k,v| puts k }

我有几件事想做。要使用一个简化的示例,我将如何为 odd_keys 方法创建定义让我调用:

sh = SpecificHash.new
sh.odd_keys { |k,v| puts k }

让它像 each 方法一样工作,但只包含键为奇数的键/值对?

最佳答案

将此方法添加到您的类中应该可行:

def odd
return enum_for(:odd) unless block_given?
each do |k, v|
if k.respond_to?(:odd?) && k.odd?
yield k, v
end
end
end

第一行是非常标准的做法,它允许您在 block 未传递给您的方法时返回一个枚举器,就像 each 一样。它可以实现以下功能:

hash.odd.select { ... }

关于ruby - 向继承自 Hash 的 Ruby 类添加类似 'each' 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21650291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com