2009-07-24 8 views
0

Eklipse (RedRails) über „Feature envy“ im folgenden Code beschweren:Warum klagen Eclipse über "Feature Neid" Geruch in meinem Code?

if input_text =~ /^(---\s*\n.*?\n?)(---.*?)/m 
    content_text = input_text[($1.size + $2.size)..-1] # warning in $1 

    header = YAML.load($1) 

    @content = content_text.strip() 
    @title = header["title"] 
end 

Mein Verständnis ist, dass ich sicher diese Warnung zu ignorieren. Aber ich bin verrückt, warum diese Warnung erzeugt wird. Ich kann nicht verstehen, wie ich die Methode für $1.size und $1 extrahieren kann.

+1

Können Sie nach einem bisschen mehr von dem umgebenden Code? Ich hatte einen Versuch, dies in stinkenden Zustand zu bringen, konnte es aber nicht über Feature Envy beschweren - Danke – mikej

+1

Kannst du bitte die ganze Methode und den vollständigen Text von Reeks Warnmeldung posten? Ich kann das FeatureEnvy mit der aktuellen Version von Reek nicht melden. – kevinrutherford

Antwort

2

Reek sagt Ihnen, dass, weil Sie zwei Eigenschaften der gleichen Klasse hinzufügen, sollte die Berechnung tatsächlich in String gehören. Wenn Stringlängen Zugabe ist dies natürlich Unsinn, aber in Ihrem Fall kann der Code unter Verwendung $& (das komplette angepasst string) vereinfacht werden:

input_text[$&.size..-1] 
+0

Nicht streng zutreffend. Erstens meldet Reek FeatureEnvy nicht wie oben gezeigt für den Code. Und zweitens sind $ 1 und $ 2 verschiedene Objekte, daher wird Reek nicht vorschlagen, dass dieser Code auf beide verschoben werden könnte. – kevinrutherford

Verwandte Themen