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です。

ブロックを指定すると、enum の各要素に対して、ブロックにアキュムレータ値 (メモ) と要素が渡されます。代わりにシンボルを指定すると、コレクション内の各要素が memo の名前付きメソッドに渡されます。どちらの場合も、結果が memo の新しい値になります。反復の最後に、 memo の最終値がメソッドの戻り値になります。

injectそのため、最初に空の Hashを渡しoます。次に、ハッシュオブジェクトを渡すたびにブロック内でo、メソッドを使用して、新しいキーと値のペアHash#mergeで更新を続けます。keyは array からのメソッド名で value はメソッド呼び出しの結果です。VALID_OPTIONS_KEYS

それがあなたを助けることを願っています!

于 2013-08-28T21:57:23.653 に答える