小结一下我知道的proc和lambda的区别。
其实他们本质上都是proc,不信试试下面的代码?
bar = Proc.new do
puts "bar"
end
puts bar.class
bar = lambda do
puts "bar"
end
puts bar.class
下面来简单说明一下这两个的区别:
关于return它们有不同的处理方式。你猜下面的一段代码会打印什么出来?
def foo
bar = Proc.new do
puts "bar"
return
end
bar.call
puts "foo"
end
def foobar
bar = lambda do
puts "bar"
return
end
puts bar.class
bar.call
puts "foobar"
end
foo
foobar
lambda会像一个方法一样,返回自己的东西。而proc会像一段代码一样,返回包含他的方法。所以结果foo方法就只会打印bar,而foobar方法就会打印bar和foobar。
关于输入值的处理。猜猜下面哪个函数打印出bar哪个打印出error?
def foo
begin
bar = Proc.new do |v1, v2|
puts v1
end
bar.call('bar')
rescue
puts 'foo error'
end
end
def foobar
begin
bar = lambda do |v1, v2|
puts v1
puts v2
end
bar.call('bar')
rescue
puts 'foobar error'
end
end
foo
foobar
上一段讲到过,lambda会像一个方法一样。所以这次foo会打印出bar,而foobar会打印出foobar error。
(完)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。