3

this questionEnumerable#injectへの回答で説明されているように、 iteration で使用されるメソッドとしてシンボルまたはブロックのいずれかを取ることができるとすれば、 withinと組み合わせて inを使用する理由はありますか? 次のペアは同じ結果を返します。&Symbol#to_procEnumerable#inject

[1, 2, 3, 4, 5].inject(:+)
[1, 2, 3, 4, 5].inject(&:+)

[:a, :b, :c].inject({a: {b: {c: 1}}}, :fetch)
[:a, :b, :c].inject({a: {b: {c: 1}}}, &:fetch)

シンボルの使用とブロック (によって作成された&) の使用で結果が異なるユースケースはありますか? 一方を使用でき、他方を使用できない場合はありますか?

4

1 に答える 1

4

古いバージョンの Ruby (1.8.6 以前) をサポートする必要がありSymbol#to_proc、それらのバージョン (アクティブなサポートなど)を定義するライブラリを使用している場合、使用しているバージョン&は機能し、他のバージョンは機能しません。

それ以外の2つのバージョンの唯一の違いは、シンボルを使用するバージョンの方が高速であり、&再定義すると使用するバージョンが影響を受けることですSymbol#to_proc-ただし、それが役立つケースは考えられません. いいえ、Ruby 1.8.6 をサポートする必要がなければ、シンボル形式を使用しない理由はありません。

于 2013-01-25T17:33:37.987 に答える