一、简介
二、例子(可在 irb 中运行)
class A
#一般的函数调用时加入块,不处理而已,不会报错。
def hi
'morning'
end
#方式1,任何函数只要加入一条语句,立刻具有处理块的能力,神奇吧
def hi2
yield if block_given? # 只要这一句
end
#方式2,传入Proc 完全等价方式1, 繁琐,没有必要使用。
def hi3(&block)
block.call if block #注意 & 字符
end
#方式3, 传入Proc对象是为了保存。
def save_it(&block)
@block = block if block #存入实例变量@block中
end
#续方式3, 保存Proc是为了以后调用。
def call_it
@block.call if @block
end
end
a = A.new
a.hi{|x| p x} #=>"morning"
a.hi2{p 'hi'} #=>"hi"
a.hi3{p 'hi'} #=>"hi"
a.save_it{p 'hi, proc'} #=>"#<Proc:...>"
a.call_it #=>"hi,proc"
a.call_it #=>"hi,proc"