Ruby 中的 & 与代码块

摘要

&操作符号的含义是,这是一个Proc对象,我想把它当成代码块使用。去掉&操作符,就能再次得到一个Proc对象。
参考书籍 《Ruby元编程》(第二版)

基础范例:

def no_name_block_fuc
  yield
end

def name_block_fuc &test_block
  p test_block
  yield
end

name_block_fuc {1+1}
#
 => 2

p = proc {2+2}                     => #     
no_name_block_fuc(&p)     => 4

拓展:
当&作用的对象非Proc时,会自动调用对象的#to_proc方法,把对象转化程一个Proc,再转化成一个代码块。
比如Symbol中有如下代码:

class Symbol
  def to_proc
    Proc.new { |x| x.send(self) }
  end
end

所以,经常看到如下类似代码:

a = ['abc','cde']
a.map(&:reverse)

你可能感兴趣的:(Ruby 中的 & 与代码块)