复杂有趣的Ruby注入方法。它有什么作用?

复杂有趣的Ruby注入方法。它有什么作用?,ruby,inject,Ruby,Inject,我很难理解这个注入方法到底发生了什么。它来自octokit gem 1.25.0的早期版本 VALID_OPTIONS_KEYS = [ :adapter, :faraday_config_block, :api_version, :api_endpoint, :web_endpoint, :status_api_endpoint, :login, :password, :proxy,

我很难理解这个注入方法到底发生了什么。它来自octokit gem 1.25.0的早期版本

VALID_OPTIONS_KEYS = [
      :adapter,
      :faraday_config_block,
      :api_version,
      :api_endpoint,
      :web_endpoint,
      :status_api_endpoint,
      :login,
      :password,
      :proxy,
      :oauth_token,
      :client_id,
      :client_secret].freeze
这就是行动

VALID_OPTIONS_KEYS.inject({}){|o,k| o.merge!(k => send(k)) }

有人能帮我吗。我对解释这一点的各种方式感兴趣。谢谢

有效的\u选项\u键
保存所有符号方法名称。现在,行
VALID_OPTIONS_KEYS.inject({}){o,k|o.merge!(k=>send(k))}
将创建一个哈希,其中
key
将是符号方法的名称,value将是符号方法的结果

非常类似于以下内容:

VALID_OPTIONS_KEYS = [
      :downcase,
      :upcase].freeze

VALID_OPTIONS_KEYS.inject({}){|o,k| o.merge!(k => "aa".send(k)) }
# => {:downcase=>"aa", :upcase=>"AA"}
文档非常清楚地理解了
inject
的工作原理

如果指定一个块,则为枚举中的每个元素传递一个累加器值(memo)和元素。如果改为指定符号,则集合中的每个元素都将传递给memo的命名方法。在任何一种情况下,结果都将成为memo的新值。迭代结束时,memo的最终值是该方法的返回值

因此,我们在开始时传递一个空哈希
o
。然后在块内,每次传递哈希对象
o
,使用该方法,使用新的键/值对保持更新。其中key是数组
VALID\u OPTIONS\u KEYS
中的方法名称,该值是方法调用的结果

希望它能帮助你