Ich habe eine einfache Klasse, die bei der Initialisierung zwischen einem und acht Parametern benötigt. Es stellt die Accessoren für diese später ein. Rubocop versucht mich zu verhaften, weil das ABC zu hoch ist, aber ich bin mir nicht sicher, ob irgendetwas mit dem, was ich getan habe, falsch ist. Ist dies ein Fall, in dem ich die Überprüfung auf meiner Initialisierung einfach deaktiviere?Zuweisung Verzweigungsbedingung zu hoch
class Foo
attr_accessor :one, :two, :three, :four
attr_accessor :five, :six, :seven, :eight
def initialize(p={})
@one = p[:one] if p[:one].present?
# ...
@eight = p[:eight] if p[:eight].present?
end
end
Mein einziger Gedanke an Größe zu reduzieren wäre, etwas zu tun wie Iterieren durch alle meine attr_accessors auf initialize, zu sehen, ob es ein entsprechendes Symbol in der hat durchlaufen, und wenn ja zuweisen.
class Foo
attr_accessor :one, :two, :three, :four
attr_accessor :five, :six, :seven, :eight
def initialize(p={})
instance_variables.each do |variable|
send("@#{variable}") = p["#{send(variable)}".to_sym] if p["#{send(variable)}".to_sym].present?
end
end
end
Aber das scheint irgendwie schwach.
Das sieht ähnlich aus wie ich dachte, könnte ein Cop out sein. Wortspiel beabsichtigt. Während ich zustimme, dass dies ein Weg ist, das Problem zu lösen, gibt es eine Referenz, auf die Sie mich verweisen könnten, damit ich mehr darüber lesen kann, warum dies der "richtige" Weg ist? Danke, dass Sie sich die Zeit genommen haben, zu antworten! – CarlyL
@CarlyL In Bezug auf den richtigen Weg - Ruby ist eine sehr flexible Sprache, so dass Dinge auf verschiedene Arten getan werden können. Und oft ist der "richtige Weg" eine Frage der persönlichen Vorlieben. Ich denke, du kannst Ruby Style Guides durchlesen, um zu sehen, was ** nicht ** zu tun ist, aber ich bezweifle, dass jemand etwas für 100% richtig hält :) –
Du könntest auch die Namen der Attribute in ein eingefrorenes Array schreiben, wie '' 'ATTR_NAMES =% i (eins zwei drei vier fünf sechs sieben acht) .freeze''' Konstante und rufen' '' attr_accessor (* ATTR_NAMES) '' ' –