Ruby rubocop:如何冻结用splat生成的数组常量

时间:2016-08-04 01:49:46

标签: ruby constants freeze rubocop splat

我正在分配一个像这样的数组常量:

NUMS = *(2..9)

Rubocop说

C:冻结分配给常量的可变对象。
NUMS = *(2..9)
^^^^^

所以我试试

NUMS = *(2..9).freeze

Rubocop说

C:冻结分配给常量的可变对象。
NUMS = *(2..9).freeze
^^^^^^^^^^^^

尝试

NUMS = (*(2..9)).freeze

Rubocop说

E:意外的令牌tRPAREN (使用Ruby 2.0解析器;在AllCops下使用TargetRubyVersion参数进行配置)
NUMS =(*(2..9))。冻结<^

尝试

NUMS = [1, 2, 3, 4, 5, 6, 7, 8, 9].freeze

Rubocop说

== happy_robot_dance(无错误)

我说

我的手因输入1,2,3,... 9而受伤。

有没有办法使用splat分配和冻结常量?

----------

解决方案

NUMS = (2..9).to_a.freeze

NUMS = Array(2..9).freeze

3 个答案:

答案 0 :(得分:5)

此案件以前由RuboCop下载不明(读错误。)

我添加了issuepull request来解决此问题。

与此同时,你可以通过以下方式禁用警察,使用以下方法使警察沉默:

# rubocop:disable Style/MutableConstant
NUMS = *(2..9)
# rubocop:enable Style/MutableConstant

或者您可以使用#to_a

NUMS = (2..9).to_a.freeze

答案 1 :(得分:0)

我认为这是一个为了自己的缘故安抚Rubocop的情况 - 案例2看起来应该有效,因此可能被认为是一个错误。但是,这有用吗?

loadScript("//www.google-analytics.com/analytics.js", SetInlineManualCallbacks);

答案 2 :(得分:0)

您可以尝试:

NUMS = Array[*2..9].freeze