0

このコードで &:hex が何を意味するのかを理解しようとしています

    sort_by{|x|x.scan(/\d*/).map &:hex}

完全なコードは次のようになります

 class Array
  def version_sort
   sort_by{|x|x.scan(/\d*/).map &:hex}
  end
 end

map がスキャンされた部分に対してアクションを実行することを知っているので、数字を置き換えると推測しています

 (/\d*/) 

&:hex

しかし、それが何を意味するのかわかりません

4

2 に答える 2

3

この場合&はオブジェクトを取り、オブジェクトがまだ でないProc場合は、Symbol の場合と同様に、そのオブジェクトで:hexメソッドを呼び出そうとしto_procます。Symbolのドキュメントには、to_procメソッドの実装の詳細が記載されています。

to_proc

指定されたメソッドに sym で応答する Proc オブジェクトを返します。

(1..3).collect(&:to_s)  #=> ["1", "2", "3"]

あなたの場合&:hex、シンボル:hexを介して、と同等の Proc オブジェクトに変換されます{ |item| item.hex() }

Proc とは正確には何ですか? 基本的に、Proc クラスは基本的な無名関数です。Ruby では、呼び出し可能なオブジェクトの概念は、メッセージを送信できるオブジェクトを通じて Ruby に組み込まれていますcall。この種の主な代表者はProcLambdaです。

Proc オブジェクトは自己完結型のコード シーケンスであり、メソッドの引数として作成、保存、渡し、ある時点で を介して実行できcallます。のようなメソッドmapは、引数としてブロックを取ることもできます。これは、 を渡す場合です&:hex

map一種の暗黙的な呼び出しのメソッド定義ではProc.new、まったく同じブロックを使用して作成されます。次に、Proc オブジェクトによって具現化されたコードを実行する call メソッドを通じて、Proc が実行されます。

于 2013-08-21T20:19:09.980 に答える
1

これら 2 つの式は同等です。

foo.map {|x| x.hex}
foo.map &:hex
于 2013-08-21T20:09:26.557 に答える