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}
#<Proc:0x007fc3d8121af8@(irb):47>
 => 2

p = proc {2+2}                     => #<Proc:0x007fc3d7aa57b0@(irb):56>     
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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。