Dir*_*ins 4 ruby constants freeze splat rubocop
我正在分配一个像这样的数组常量:
NUMS = *(2..9)
Run Code Online (Sandbox Code Playgroud)
Rubocop说
C:冻结分配给常量的可变对象. NUMS
=*(
2..9 )^^^^^
所以我试试
NUMS = *(2..9).freeze
Run Code Online (Sandbox Code Playgroud)
Rubocop说
C:冻结分配给常量的可变对象.
NUMS =*(2..9).freeze
^^^^^^^^^^^^
试着
NUMS = (*(2..9)).freeze
Run Code Online (Sandbox Code Playgroud)
Rubocop说
E:意外的令牌tRPAREN(使用Ruby 2.0解析器;在AllCops下使用TargetRubyVersion参数配置)NUMS
=(*(2..9)).冻结
^
试着
NUMS = [1, 2, 3, 4, 5, 6, 7, 8, 9].freeze
Run Code Online (Sandbox Code Playgroud)
Rubocop说
== happy_robot_dance(没有错误)
我说
键入1,2,3,... 9,我的手会受伤
有没有办法使用splat分配和冻结常量?
解决方案
NUMS = (2..9).to_a.freeze
NUMS = Array(2..9).freeze
Run Code Online (Sandbox Code Playgroud)
这个案子以前是由RuboCop解释的(阅读bug.)
与此同时,您可以通过以下方式禁用警察:
# rubocop:disable Style/MutableConstant
NUMS = *(2..9)
# rubocop:enable Style/MutableConstant
Run Code Online (Sandbox Code Playgroud)
或者您可以使用#to_a:
NUMS = (2..9).to_a.freeze
Run Code Online (Sandbox Code Playgroud)
我认为这是为了安抚 Rubocop 本身而进行的案例 - 案例 2 看起来应该可行,因此可以被视为一个错误。然而,这有效吗?
why_do_i_exist = *(2..9)
NUMS = why_do_i_exist.freeze
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1660 次 |
| 最近记录: |