【问题标题】:Ruby proc vs lambda in initialize()Ruby proc vs lambda in initialize()
【发布时间】:2012-06-21 03:11:54
【问题描述】:

今天早上我发现 proc.new 在类初始化方法中工作,但不是 lambda。具体来说,我的意思是:

class TestClass

  attr_reader :proc, :lambda

  def initialize
    @proc = Proc.new {puts "Hello from Proc"}
    @lambda = lambda {puts "Hello from lambda"}
  end

end

c = TestClass.new
c.proc.call
c.lambda.call

在上述情况下,结果将是:

Hello from Proc
test.rb:14:in `<main>': undefined method `call' for nil:NilClass (NoMethodError)

这是为什么呢?

谢谢!

【问题讨论】:

    标签: ruby lambda proc


    【解决方案1】:

    您定义了一个名为lambdaattr_accessor 的事实隐藏了创建块的原始lambda 方法(因此您的代码实际上隐藏了Ruby 的lambda)。您需要将属性命名为其他名称才能使其工作:

    class TestClass
    
      attr_reader :proc, :_lambda
    
      def initialize
        @proc = Proc.new {puts "Hello from Proc"}
        @_lambda = lambda {puts "Hello from lambda"}
      end
    
    end
    
    c = TestClass.new
    c.proc.call
    c._lambda.call
    

    【讨论】:

    • 致电Kernel.lambda 是另一种选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2014-02-07
    • 2010-09-06
    • 2012-07-24
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多