私が読んだものから、
something {|i| i.foo }
something(&:foo)
同等です。したがって、x =%w(abcd)の場合、次の同等物ではないのはなぜですか。
x.map {|s| s.+ "A"}
x.map {&:+ "A"}
?
最初のものは期待どおりに機能しますが(["aA"、 "bA"、 "cA"、 "dA"]を取得します)、2番目のものは何を試してもエラーになります。
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"]
これがうまくいけば、ルビイストとしては何の関係もありません。#method_missing
これを改善するために構築されたpostfixクラス全体を作成しました。単純なダーティソリューションは次のようになります。
x = ?a, ?b, ?c
def x.rap( sym, arg )
map {|e| e.send sym, arg }
end
x.rap :+, "A"