2016-07-27 8 views
4

Rubocopは私に次の犯罪Rubocop respond_to_missingを解決するには?犯罪

lib/daru/vector.rb:1182:5: C: Style/MethodMissing: When using method_missing, define respond_to_missing? and fall back on super. 
    def method_missing(name, *args, &block) ... 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

を与える方法は次のように定義されません:

def method_missing(name, *args, &block) 
    if name =~ /(.+)\=/ 
    self[$1.to_sym] = args[0] 
    elsif has_index?(name) 
    self[name] 
    else 
    super(name, *args, &block) 
    end 
end 

Iは、here

def respond_to_missing?(method_name, include_private=false) 
    (name =~ /(.+)\=/) || has_index?(name) || super 
end 

から例を照準以下のコードでそれを修正しようとしましたしかし、今Rubocopは私に次の犯行を与える:

lib/daru/vector.rb:1182:5: C: Style/MethodMissing: When using method_missing, fall back on super. 
    def method_missing(name, *args, &block) ... 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

私は何が間違っているのか分からないようです。あなたが見ることができるように、私はelseブロックのsuperに落ちています。

+0

コメント '#のrubocopを入れて:あなたはsuperに渡している引数はあなたが受け取ったものと同じであるとして、あなたは単に引数を削除することができ犯罪と'#のrubocopと行の前にスタイル/ MethodMissing'を無効にします。スタイル/ MethodMissing'を直後に有効にしてください。 Rubocopは単なる警官であり、間違いを犯す可能性があります。 – mudasobwa

+2

ところで、受け取ったのと同じ引数を渡したいだけなら、引数リストなしで 'super'を呼び出すことができます。これはあなたの問題とは関係がありません。Rubocopは単に 'super'呼び出しにつながるパスがあるのを見ることができないようです(覚えておいて、 Haltingの問題、そしてRubyは、ブートするために静的に容易に分析できるようには正確には設計されていません)。または、おそらく、実際には*シャットダウンします。 –

答えて

5

Rubocopは、引数なしでsuperが呼び出されると予想しています。

def method_missing(name, *args, &block) 
    if name =~ /(.+)\=/ 
    self[$1.to_sym] = args[0] 
    elsif has_index?(name) 
    self[name] 
    else 
    super 
    end 
end 
+0

この1つ@Justinに乗ってくれてありがとう。私はあなたが別の、行方不明の警官を特定したかもしれないと思う:-) 'Lint/UselessSuperArguments'の行に何かがあります。 – Drenmi

関連する問題