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)
Verzeihen Sie mir, wenn das Beispiel gekünstelt ist. Der ursprüngliche Code ist von der Versicherungswelt, aber ich kann es nicht kopieren und einfügen :)
Der Kern des Problems ist, ich möchte Creatures.each
in einem anderen Modul verwenden, es einen Block übergeben, und es funktioniert genauso wie Creatures.keys.each
arbeiten (also würde ich w/dem gegebenen Beispiel Begleiter Daten 8000 für get_companion_creature_experience(companion_data)
bekommen.
Derzeit erhalte ich Enumerator
statt.
sollten Sie berücksichtigen nur die Umsetzung 'each' und dann mit dem [Enumerable] (http://ruby-doc.org/core-2.3.1/Enumerable .html) Modul, das Ihnen "sammeln", "auswählen" und alle anderen Enumerable-Methoden kostenlos zur Verfügung stellen wird. –
Ich habe 'include Enumerable' in den' class << self' Block eingefügt und es scheint großartig zu funktionieren. –