我无法理解这种注入方法的最新进展。它来自之前版本的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)) }
任何人都可以帮助我。我对可以解释的各种方式感兴趣。感谢
答案 0 :(得分:2)
VALID_OPTIONS_KEYS
包含所有符号方法名称。现在,行VALID_OPTIONS_KEYS.inject({}){|o,k| o.merge!(k => send(k)) }
将创建一个哈希,其中key
将是符号方法的名称,值将是符号方法的结果。
非常类似于下面:
VALID_OPTIONS_KEYS = [
:downcase,
:upcase].freeze
VALID_OPTIONS_KEYS.inject({}){|o,k| o.merge!(k => "aa".send(k)) }
# => {:downcase=>"aa", :upcase=>"AA"}
文档Enumerable#inject
非常清楚,了解inject
的工作原理。
如果指定一个块,那么对于枚举中的每个元素,块将传递一个累加器值(memo)和元素。如果指定了符号,则集合中的每个元素都将传递给命名的备忘录方法。在任何一种情况下,结果都将成为备忘录的新值。在迭代结束时,memo的最终值是方法的返回值。
所以我们在开头传递inject
空哈希o
。然后在块内部,每次使用方法Hash#merge
传递哈希对象o
,继续使用新的键/值对进行更新。其中 key 是数组VALID_OPTIONS_KEYS
中的方法名称,值是方法调用的结果。
希望它会对你有所帮助!