那是我月光下的奔跑 -- Ruby Proc 和 Lambda

浏览: 201 发布日期: 2017-07-31 分类: ruby

小结一下我知道的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
  • 关于输入值的处理。猜猜下面哪个函数打印出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

(完)

返回顶部