• Ruby Proc 和 lambda的共同点和区别


    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! 

  • 相关阅读:
    三级联动下拉菜单1
    IP地址查询接口及调用方法
    实现简单的网页拖拽效果
    [转载]PHP如何获取客户端真实IP
    mysql(二)连接查询
    php exec 执行php脚本
    PHP-将某一目录下文件压缩成zip格式
    从读书时代想我的程序之路
    Github上建立自己的网站
    小米手机购买程序,如果是我,我会怎么写
  • 原文地址:https://www.cnblogs.com/patientAndPersist/p/4378267.html
Copyright © 2020-2023  润新知