复杂有趣的Ruby注入方法。它有什么作用?
我很难理解这个注入方法到底发生了什么。它来自octokit gem 1.25.0的早期版本复杂有趣的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,
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
中的方法名称,该值是方法调用的结果
希望它能帮助你