Передача блока как переменной с ошибкой "ArgumentError: Missing block" - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть метод

  def self.fetch(key, &block)
    begin
      Rails.cache.fetch(key, block)
    rescue Redis::CommandError => e
      raise unless e.message == "OOM command not allowed when used memory > 'maxmemory'."

      Utils.log_exception ex
      yield
    end
  end

Это сбой в строке 3 с ошибкой

ArgumentError: Отсутствует блок: Для вызова Cache#fetch с force: true требуется блок.

Я не уверен, что передача блока в качестве такого параметра - правильный путь, но я не мог найти другой путь.

Как правильно передать переменную, содержащую блок, в метод?

1 Ответ

3 голосов
/ 23 апреля 2019

Оператор & с унарным префиксом в списке аргументов используется для "разворачивания" экземпляра Proc, как если бы он был передан в качестве блока методу, точно так же, как символ & амперсанда в параметре list используется для "сворачивания" блока, переданного в качестве аргумента, в экземпляр Proc:

Rails.cache.fetch(key, &block)
#                      ↑
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...