proc 可以看做是一个代码块
a = proc{|x| x}
a.call #=> nil
lambda 更象是一个方法
b = lambda{|x| x}
b.call #=>
ArgumentError: wrong number of arguments (given 0, expected 1)
from (irb):122:in `block in irb_binding'
from (irb):123
from /home/zhihui/.rbenv/versions/2.3.3/bin/irb:11:in `<main>'
两个方法自己先体会一下有什么区别。
def hi
a = proc {
return "hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
}
a.call
"say hi"
end
irb> hi #=> "hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
def hello
b = lambda {
return "hello"
}
b.call
"say hello"
end
irb> hello #=> "say hello"
------______------华丽分割线------______-----
method可以把方法作为参数传递
method(:hi).call
irb> method(:hi).call
=> "hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
作用把方法作为代码块传递。
-----______------华丽分割线------______-----
block 和 yield 的区别
def hi &black
black.call
end
irb> hi { 666 }
irb> #=> 666
------------------------------
def hello
yiled
end
irb> hello { 777 }
irb> 777
-----------------------------
实际上他们除了写法上的一些不同之外,在效率上yiled的效率高出很多,所也大多数情况下都用yiled