首页 > 解决方案 > 将块作为变量传递失败“ArgumentError:缺少块”

问题描述

我有方法

  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: Missing block: 调用Cache#fetchwithforce: true 需要一个块。

我不确定将块作为这样的参数传入是否是正确的方法,但我看不到另一种方法。

将包含块的变量传递给方法的正确方法是什么?

标签: ruby

解决方案


参数列表中的&&符号一元前缀运算符用于“展开”实例,Proc就好像它作为块传递给方法一样,就像&参数列表中的&符号用于“展开”传递的块一样一个实例的参数Proc

Rails.cache.fetch(key, &block)
#                      ↑

推荐阅读