ruby - Lambda 与 Proc 在内存和效率方面的对比

标签 ruby lambda proc

我知道应该在不同的情况下使用 Procs 和 lambda(lambda 检查参数的数量等),但它们占用的内存量是否不同?如果是,哪个更有效?

最佳答案

Lambdas 和 Procs 之间存在一些差异。

  1. Lambda 具有所谓的“小返回”。这意味着 Lambda 会将流程返回给调用它的函数,而 Proc 将从调用它的函数返回。

     def proc_demo
       Proc.new { return "return value from Proc" }.call
       "return value from method"
     end
    
     def lambda_demo
       lambda { return "return value from lambda" }.call
       "return value from method"
     end
    
     proc_demo    #=> "return value from Proc"
     lambda_demo  #=> "return value from method"
    
  2. Lambda 会检查传递给它们的参数数量,而 Proc 则不会。例如:

     lambda { |a, b| [a, b] }.call(:foo)
     #=> #<ArgumentError: wrong number of arguments (1 for 2)>
    
     Proc.new { |a, b| [a, b] }.call(:foo)
     #=> [:foo, nil]
    

关于ruby - Lambda 与 Proc 在内存和效率方面的对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221562/

相关文章:

ruby - Ruby 中的 String#split 未按预期运行

c# - 为什么在作为普通委托(delegate)参数提供时必须转换 lambda 表达式

ruby - 在 Ruby 中让一个类继承 Proc

testing - SAS 过程逻辑 : Test statement does not recognize categorical variables?

linux - m 标志和 o 标志将在 Linux 中存储在哪里

ruby - OpenSSL 没有足够的数据

ruby-on-rails - Rails 手动在自定义模型上运行验证

java - 流 : Calculate the difference of totals in one go

c++ - 在 C++ 中使用 lambda 函数初始化对象

ruby - 当参数采用数组时,Rails 使用 ActiveRecord "where"