• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

RubyProc和lambda的共同点和区别

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Proc 和 lambda 的目的是把block {....} 变成类似方法一样的对象,使其不需要重复编写同样的block。

Proc 和 lambda 的共同点:

  • 语法类似
    Proc.new{|n| n**2}

    lambda{|n| n**2}

  • 都可以用.call方法调用

    hello_proc = Proc.new{ puts "Hello!" }
    hello_proc.call #Hello!
    hello_lambda = lambda{ puts "Hello!" }
    hello_lambda.call #Hello!

  • 都可以用&关键字把各自转换为block
    nums = [1,3,4,5,6]
    cube_proc = Proc.new{ |n| n**3 }
    cube_nums_proc = nums.map(&cube_proc) #[1,27,64...]

    cube_lambda = lambda{ |n| n**3 }
    cube_nums_lambda = nums.map(&cube_lambda) #[1,27,64...]

  • 两者都是Object

Proc 和 lambda 的区别:

  1. lambda检查传入的参数,如果传入不正确的参数就throw an error; Proc 则不检查,即使传入不正确的参数也只会忽视它,并把nil赋值给结果(assign nil to any that are missing.)。
  2. lambda返回时把控制权交还给它的调用函数,而Proc则不会交换。

    def batman_ironman_proc
    victor = Proc.new { return "Batman will win!" }
    victor.call
    "Iron Man will win!"
    end

    puts batman_ironman_proc

    def batman_ironman_lambda
    victor = lambda { return "Batman will win!" }
    victor.call
    "Iron Man will win!"
    end

    puts batman_ironman_lambda

    输出结果====》Batman will win!
                          Iron Man will win! 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[ruby]sinatra学习1(getstart)发布时间:2022-07-14
下一篇:
Ubuntu 12.04搭建Ruby on Rails开发环境发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap