Ruby 俄罗斯警察。 MutableConstant - 未检测到冻结

Ruby Rubocop. MutableConstant - not detecting freeze

我写了一个 lib/animal.rb,其中包含几个参数列表,我想在我的控制器中引用该列表并将其添加到我的参数列表中。我这样做是因为我在多个位置使用了这个列表,并且不想在我的代码中乱放一堆对库的引用。

控制器

ANIMAL_TYPE_INPUT_PARAMS = *Animals::ANIMAL_TYPE_PARAMS.freeze

....

def familar_params
  params.permit(ANIMAL_TYPE_INPUT_PARAMS, OTHER_PARAM_LIST....)
end

Lib/animal.rb

module Animal

  # param lists
  ANIMAL_TYPE_PARAMS = [
    :animal_has_fur, :animal_id, :animal_weight
  ].freeze
end

在功能上它工作得很好,但我看到一个奇怪的 rubocop 错误。我宁愿不为这一部分禁用 MutableConstant(禁用 rubocop 通常是你在某些时候支付的创可贴)。

Rubocop 错误

app/controllers/api/v1/example_controller.rb:55:24: C: Freeze mutable objects assigned to constants.
  ANIMAL_TYPE_INPUT_PARAMS = *Animals::ANIMAL_TYPE_PARAMS.freeze
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我调查了这个问题:Ruby rubocop: how to freeze an array constant generated with splat 但是我的已经是数组了,所以我觉得它不适用于我/不应该调用 to_a。

正如@drenmi 所建议的,这是旧版本的 rubocop 给了我这个错误。一旦我升级到 0.46.0,错误就不再存在了。