Ruby - 每个都有单例模块。返回一个值给出一个枚举器。我怎样才能获得值(value)呢?

标签 ruby

示例代码:

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/

相关文章:

ruby-on-rails - 根据给定日期返回 1 到 52 之间的整数

ruby - Vagrant - 安装 Ruby Gems

ruby - 未找到 RVM 包

ruby - VS Code Prettier 破坏哈希访问

ruby - 如何在 Rails 中使用 Disqus gem?

ruby - 如何在 Ruby Sinatra 中读取 GZIP 负载

ruby-on-rails - Ruby on Rails : filter associations on model based on several conditions

ios - 我的终端上的 “pod setup” 命令出错(Cocoapods 安装)

ruby - Ruby 中的时区选择列表(按 UTC 偏移量)

sql - 我可以向 Oracle 发送 "batched"INSERT 吗?