摘要
&操作符号的含义是,这是一个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)