加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

初始化()中的Ruby proc与lambda

发布时间:2020-12-17 03:03:06 所属栏目:百科 来源:网络整理
导读:我今天早上发现proc.new在类初始化方法中工作,但不是lambda.具体来说,我的意思是: class TestClass attr_reader :proc,:lambda def initialize @proc = Proc.new {puts "Hello from Proc"} @lambda = lambda {puts "Hello from lambda"} endendc = TestClas
我今天早上发现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)

这是为什么?

谢谢!

解决方法

你定义了一个名为lambda的attr_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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读