2017-04-20 10 views
0

クラス定数を使用して属性リーダーを割り当てるときに曖昧なスプラット演算子エラーが発生しました。スプラット(*)演算子、定数付きのattr_readerとrubocop付きの

しかし、私はいくつかの回避策を試してきましたが、これはまだrubocopの犯罪/構文エラーにつながります。ここで試したのアプローチのほんの一部です:

Class X1 
    CONST = [:a, :b, :c] 
    attr_reader(*CONST) 
end 


Class X1 
    CONST = [:a, :b, :c] 
    attr_reader(*(CONST)) 
end 
+0

'Class'の代わりに' class' – Ilya

+0

'attr_reader(* CONST)'はRubocopを怒らせません。 –

答えて

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 
+0

@Ilya:ありがとう。いくつかのガイドラインは私にとってかなり自由に思えます。 –

+0

そうですが、 '%i()'から '%i []'への変更はどこからも行われていないようですので、この変更を無効にしてgit diff/blameの履歴を駄目にします。 –

+0

@AndreyDeineko:[ruby-style-guidelines](https://github.com/bbsosov/ruby-style-guide)から:配列リテラル(%w、%i、%W、%I)の "[]標準の配列リテラルに揃えられているためです。そうです、レポを修正する価値はないようです。 –

1

私が作成することに同意以下のような:

attr_reader *FOO 

attr_readerのリターンがvoidコンテキストで起こるので、曖昧と考えるべきではなく、したがって、乗算を行うことがmeaninglesだろうおそらく間違いです。

さらに、慣用Rubyでは、マクロメソッドが括弧なしで呼び出される必要があり、の括弧を追加する必要がある場合は、がこの規約と矛盾します。

私たちはこれを認識しており、RuboCopレポにはopen issueがあります。しかし、このコップは、本質的にはparser gemの診断に関するラッパーですから、ちょっと特別です。警察を再導入することなくこの例外を作成する簡単な方法は存在しないかもしれません。スプラット引数付きマクロメソッドの

  • 使用括弧:今のところ


    は、あなたがこの問題を回避するために多くのオプションを持っています。

  • rubocop:disable指示文を使用して、この違反の各インスタンスの警官をインラインで無効にします。 (これは犯行の数によっては可能であるかもしれません)
  • 問題が解決するまで、このウイルスを完全に無効にしてください。
関連する問題