замена instance_exec(& Proc.new) в Ruby 2.7

В нашем приложении есть небольшой долгоживущий код, который устанавливает систему "флагов функций" и выглядит следующим образом:

    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()bit выдает неприятное предупреждение об устаревании. Как мне исправить в этом случае? Просто заменив на&block как предполагается, здесь не работает.

1 ответ

Спасибо всем. @tadman был прав. Я заменил&Proc.new с участием &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
Другие вопросы по тегам