я бы пошел на:
text.each{ |c|
...
... Generic state processing
...
case @state
when :state_1 then code
when :state_2 then code
end
}
Но если это как в первом примере (то есть только 1 состояние требует дополнительной обработки)
text.each{ |c|
...
... Generic state processing
...
next unless @state == :state_1
...
... Code that process states other than :state_1
}
Пройдя еще дальше, вместо попадания в переменную экземпляра, звучит приятнее спросить у объекта, находится ли он в том состоянии, в котором мы нуждаемся, например:
def processed?
@state == :state_1
end
...
next unless processed? # sounds like natural language...
...
Рассуждая немного дальше, я думаю, что один из лайнеров вроде "следующий, если не обработан?" хороши только тогда, когда на одном и том же уровне отступа не более 10 строк кода, в противном случае я предпочитаю делать другое, поэтому отступы помогут мне на первый взгляд понять, что происходит