我想作出這樣的行爲就像一個標準的Ruby哈希在拋出一些額外的訪問方法的類繼承的Ruby類例如,給定:添加一個「每個」一樣的方法,從哈希
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
方法工作,但只包含鍵/值對其中的關鍵是奇數?
是的,這是一個更好的答案! – whatyouhide
我意識到「奇怪?」是一種檢查整數是否奇數的方法。我已經更新了問題,將示例方法重命名爲「odd_keys」以區分這兩者。除非block_given?'返回enum_for(:odd_keys)除非block_given?和'hash.odd是否正確,唯一需要改變的是'def odd'到'def odd_keys'和'return enum_for(:odd) .select {...}'爲'hash.odd_keys.select {...}'? –
是的,這聽起來像你正確地確定了方法名稱出現在我的答案的三個地方,你需要改變所有這些。 –