3

私が読んだものから、

something {|i| i.foo } 
something(&:foo)

同等です。したがって、x =%w(abcd)の場合、次の同等物ではないのはなぜですか。

x.map {|s| s.+ "A"}
x.map {&:+ "A"}

最初のものは期待どおりに機能しますが(["aA"、 "bA"、 "cA"、 "dA"]を取得します)、2番目のものは何を試してもエラーになります。

4

2 に答える 2

6

Symbol::to_procパラメータを受け入れません。

to_procにメソッドを追加できArrayます。

class Array
  def to_proc
    lambda { |o| o.__send__(*self) }
  end
end

# then use it as below
x.map &[:+, "a"]
于 2012-10-02T02:55:36.593 に答える
1

これがうまくいけば、ルビイストとしては何の関係もありません。#method_missingこれを改善するために構築されたpostfixクラス全体を作成しました。単純なダーティソリューションは次のようになります。

x = ?a, ?b, ?c

def x.rap( sym, arg )
  map {|e| e.send sym, arg }
end

x.rap :+, "A"
于 2012-10-02T02:41:23.400 に答える