一、代码块不是对象。
#{p "hi"} 是代码块
#代码块不是对象。
{p 'hi'}.class
#=>SyntaxError: unexpected '}', expecting $end
#所以代码块不能调用方法call
{p 'hi'}.call
#=>{p 'hi'}.call
# ^
二、 &proc 只存在于方法和方法调用的参数中,但不是一般的参数。(&proc 像 Proc 类的对象的指针,可以这么理解,&proc 不是对象)
def m
yield
end
pp = lambda{ p "hi, world"}
m(&pp) #<---- &pp 方法调用的参数中, 但不是一般的参数。
#=>"hi, world"
pp #是Proc的对象
"#<Proc: (lambda)>"
&pp #不是对象
#=>SyntaxError: unexpected tAMPER, expecting $end
三、Proc 类的对象与 Method 类的对象很像,可带调用参数,它们可以相互转换。 http://ruby-china.org/topics/10470
def m
end
pp = lambda{p "hi, world"}
method(:m).class
#=>Method
pp.class
#=>Proc