小结一下我知道的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。
(完)


树下一美女
4 声望0 粉丝

引用和评论

0 条评论