замена `instance_exe c (& Pro c .new)` в Ruby 2.7 - PullRequest
1 голос
/ 11 марта 2020

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

    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, как предлагается, здесь не работает.

1 Ответ

1 голос
/ 12 марта 2020

спасибо всем. @tadman понял это правильно. Я заменил &Proc.new на &block, но был фиктивным и не добавил это также в определение метода. Добавление в обоих местах решило проблему и устранило предупреждение об устаревании ruby 2.7 (о неиспользовании Pro c .new для захвата блока.)

Исправленный код:

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