为什么这不起作用:x.map(&:+"A")

dav*_*vej 3 ruby ampersand ruby-1.9

从我读过的,

something {|i| i.foo } 
something(&:foo)
Run Code Online (Sandbox Code Playgroud)

是等价的.因此,如果x =%w(abcd),为什么不是以下等价物:

x.map {|s| s.+ "A"}
x.map {&:+ "A"}
Run Code Online (Sandbox Code Playgroud)

第一个按预期工作(我得到["aA","bA","cA","dA"]),但是无论我尝试什么,第二个都会出错.

xda*_*azz 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"]
Run Code Online (Sandbox Code Playgroud)