0

我无法理解这种注入方法发生了什么。它来自以前版本的 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)) }

谁能帮我吗。我对可以解释的各种方式感兴趣。谢谢

4

1 回答 1

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 的新值。在迭代结束时,memo 的最终值就是方法的返回值。

所以我们在开始时传递inject一个空的 Hash o。然后在每个传递哈希对象的块内o,使用该方法Hash#merge,不断更新新的键/值对。其中key是数组中的方法名VALID_OPTIONS_KEYS,value 是方法调用的结果。

希望对您有所帮助!

于 2013-08-28T21:57:23.653 回答