【发布时间】:2016-12-09 23:31:57
【问题描述】:
我正在分配一个这样的数组常量:
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 解析器;使用 TargetRubyVersion 参数进行配置,在 AllCops 下)
NUMS = (*(2..9)).freeze
^
试过
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
【问题讨论】:
-
(2..9).to_a,应与[2,3,4, ...etc]相同。想知道2..9是Range是否会导致问题。无论如何,如果原始代码有效,那么 Rubocop 的警告似乎是没有根据的。 -
我同意,当
#to_a可用且更清晰时,没有理由使用 splat 进行数组强制。同时,这个警察不应该对此发表意见。
标签: ruby constants freeze rubocop splat