在ruby中&实际上是一个关键字,当ruby 看见这个“&” 符号的时候他会他 “&” 符号后面的内容调用了"to_proc"方法转化为一个代码块。
比如:
a=[1,2,3,4,5,6]
irb> #=> [1, 2, 3, 4, 5, 6]
a.map(&:to_s)
["1", "2", "3", "4", "5", "6"]
irb> #=> :to_s.to_proc
irb> #=> => #<Proc:0x005577886e4650(&:to_s)> #可以看到返回的确实是一个代码块。
& 后面 规定可以放 对象(:symbol也是对象),其他的数字或者字符串是不可以的。
贴个代码自己体会
## case 1class Symbol def to_proc proc { |x| x.send(self) } endendp [1, 2, 3].map &:to_sp [1, 2, 3].map &proc { |x| x*x }puts "*" * 50## case 2class ProcStore def initialize handler @handler = handler end def to_proc proc { |ele| send(@handler, ele) } end def hi ele "hi #{ele}" end def hello ele "hello #{ele}" endendp [1, 2, 3].map &ProcStore.new(:hi)p [1, 2, 3].map &ProcStore.new(:hello)puts "*" * 50## case 3def test x "test #{x}"endp [1, 2, 3].map &method(:test)