首页 > 解决方案 > 在 Ruby 2.7 中替换 `instance_exec(&Proc.new)`

问题描述

我们的应用程序中有一些长期存在的代码,用于设置“功能标志”系统,如下所示:

    def configure
      Module.new do
        def self.feature(name, options = {})
          Features.current.add(name, options)
        end
        instance_exec(&Proc.new)
      end
      self
    end

在 Ruby 2.7 中,该instance_exec()位会引发令人讨厌的弃用警告。在这种情况下我将如何解决?按照它的建议简单地替换&block在这里不起作用。

标签: rubyruby-2.7

解决方案


感谢大家。@tadman 说得对。我已经替换了&Proc.newwith&block但是是一个假人,也没有将它添加到方法定义中。在这两个地方添加解决了问题并消除了 ruby​​ 2.7 弃用警告(关于不使用 Proc.new 捕获块。)

更正后的代码:

def configure(&block)
  Module.new do
    def self.feature(name, options = {})
      Features.current.add(name, options)
    end
    instance_exec(&block)
  end
  self
end

推荐阅读