Mam prostą klasę, która po inicjalizacji pobiera od jednego do ośmiu parametrów. Ustawia te akcesory do użycia później. Rubocop próbuje mnie aresztować, ponieważ ABC jest zbyt wysoka, ale nie jestem pewien, czy coś jest nie tak z tym, co zrobiłem. Czy to jest przypadek, w którym po prostu wyłączam inspekcję na moim inicjowaniu?Stan gałęzi przydziału za wysoki
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
Jedyna myśl na zmniejszenie rozmiaru byłoby zrobić coś jak iteracja wszystkich moich attr_accessors na initialize, sprawdzając, czy istnieje odpowiedni symbol przepuszcza w ma, a jeśli tak, przypisując go.
Ale wydaje się to trochę słabe.
To wygląda podobnie do tego, co myślałem, że może być policjantem. Pun przeznaczone. Chociaż zgadzam się, że jest to sposób na rozwiązanie tego problemu, czy istnieje odniesienie, które można wskazać, abym mógł przeczytać więcej o tym, dlaczego jest to "właściwy" sposób? Dzięki za poświęcenie czasu na odpowiedź! – CarlyL
@CarlyL Odnośnie właściwej drogi - Ruby jest językiem bardzo elastycznym, więc można robić różne rzeczy. I często "właściwa droga" jest kwestią osobistych preferencji. Myślę, że możesz przeczytać Ruby Style Guides, aby zobaczyć, co ** nie ** zrobić, ale wątpię, by ktoś twierdził, że coś jest w 100% słuszne :) –
Możesz również umieścić nazwy atrybutów w zamrożonej tablicy, np. '' 'ATTR_NAMES =% i (jeden dwa trzy cztery pięć sześć siedem osiem) .freeze'''' i wywołaj' '' attr_accessor (* ATTR_NAMES) '' ' –