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

本文探讨了Ruby中Proc与Lambda的不同之处,重点在于return行为及参数处理。Proc在return时会终止外层方法,而Lambda则像普通方法一样返回。此外,Lambda在处理未指定的参数时会引发错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值