0
def test_method
  ["a", "b", "c"].map {|i| yield(i) }
end

このようにtest_methodを呼び出すと、次のようになります。

p test_method {|i| i.upcase }
# => ["A", "B", "C"]

単にこれを言うのではなく、なぜブロック内に{|i|}が必要なのですか。

p test_method { i.upcase }

私がそう思う理由は、test_methodでyieldが呼び出されたときに、すでに{|i|}があるからです。

  ["a", "b", "c"].map {|i| yield(i) }
4

5 に答える 5

3

暗黙のイテレータを持つ Groovy バックグラウンドから来ている場合、またはこの |i| なしで実行できる Scala から来ている場合。部分的な関数を使用すると、論理的な質問になるかもしれませんが、現時点で Ruby 1.9 または Rails 内で実行できる最善の方法は、JRL が言及したように Symbol#to_block メソッドを使用することです。

p test_method &:upcase

メソッド名の前に&:を追加するだけです。

于 2009-09-14T21:08:25.717 に答える