对于个人Hash
实现,我想创建一个map
,map!
的banged版本,即更改当前对象的版本,就像存在的版本一样Array
。当给出一个块时,下面的实现似乎正常工作:
class MyHash < Hash
def map! &block
self.map { |ek, ev| self[ek] = block[ev] } if block_given?
# how to return the Enumerator if block not given?
end
end
在没有阻止的情况下进行调用时,hash.map
会返回Enumerator
,如下例所示:
h.map
=> #<Enumerator: {1=>2, 12=>21, 6=>3}:map>
当我没有给出一个块时,我应该添加什么来使它返回枚举器?
答案 0 :(得分:2)
class MyHash < Hash
def map!
if block_given?
each { |k, v| self[k] = yield v }
else
to_enum :map!
end
end
end
答案 1 :(得分:-1)
我无法获得您的代码所做的事情,但您可以尝试返回self.each
:
def map! &block
if block_given?
self.map { |ek, ev| self[ek] = block[ev] }
else
self.each
end
end