示例代码:
module Creatures
class << self
def to_h
{
squirtle: {full_name: 'Squirtle T. Turtle'},
pikachu: {full_name: 'Pikachu B. Pikachu'}
}
end
def keys
to_h.keys
end
def collect
to_h.keys.collect
end
def each
to_h.keys.each
end
end
end
module CompanionHelper
def get_companion_creature_experience(companion_data)
Creatures.each do |creature|
return companion_data[creature]["#{creature}_experience".to_sym] if companion_data.has_key?(creature)
end
end
end
include CompanionHelper
companion_data = {squirtle: {squirtle_experience: 8000}}
get_companion_creature_experience(companion_data)
如果这个例子是人为设计的,请原谅我。原始代码来自保险界,但我无法复制和粘贴 :)
问题的症结在于我想在另一个模块中使用Creatures.each
,传递一个 block ,让它像Creatures.keys.each
一样工作会起作用(即,对于给定的示例伴随数据,我为 get_companion_creature_experience(companion_data)
获得 8000。
目前我得到的是 Enumerator
。
最佳答案
问题是 to_h.keys.each
返回不期望任何参数的 Enumerator
。在 each
中传递一个 block ,因为你想使用它:
def each &block
to_h.keys.each &block
end
或者你可以让出它:
def each
to_h.keys.each do |k|
yield k
end
end
关于Ruby - 每个都有单例模块。返回一个值给出一个枚举器。我怎样才能获得值(value)呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37195807/