尝试使用类常量分配属性读取器时,会出现模糊的splat操作符错误。
Class X1
CONST = [:a, :b, :c]
attr_reader *CONST
end
但是,我尝试了一些仍然导致rubocop攻击/语法错误的解决方法。以下是一些尝试过的方法:
Class X1
CONST = [:a, :b, :c]
attr_reader(*CONST)
end
Class X1
CONST = [:a, :b, :c]
attr_reader(*(CONST))
end
答案 0 :(得分:2)
这很好用,Rubocop没有找到任何可以抱怨的内容(除了X1
上缺少文档外):
class X1
CONST = %i[a b c].freeze
attr_reader(*CONST)
end
x = X1.new
p x.a
# nil
p x.b
# nil
p x.c
# nil
答案 1 :(得分:1)
我同意这样的结构:
attr_reader *FOO
不应被视为含糊不清,因为attr_reader
的返回发生在void上下文中,因此执行乘法将毫无意义且可能是错误。
此外,惯用的Ruby调用没有括号调用宏方法,并且在某些情况中添加括号的需要与此约定冲突。
我们知道这一点,我在RuboCop回购中有open issue。然而,这个警察有点特别,因为它基本上只是parser
gem诊断的包装器。如果不重新实施警察,可能没有任何简单的方法可以解决这个问题。
目前,您有很多选择可以解决这个问题:
rubocop:disable
指令禁用此攻击的每个实例的警察。 (这可能是也可能不可行,取决于犯罪的数量。)