Форматирование в Ruby является в значительной степени единственным соглашением, которое на самом деле не применяется на практике, как это делают некоторые другие языки, такие как Python, но все же очень важно для удобства чтения и избежания некоторых ошибок из-за "свободы" синтаксиса.
Что касается соглашения, пример «неправильный» в отношении отступа, второй цикл do..end
должен иметь отступ от внешнего цикла.
Что касается {..}
против do..end
, то это в значительной степени субъективно, но один большой шаг, который нужно использовать, заключается в следующем: если оператор будет выходить за пределы одной строки или если он вложенный, то предпочтительнее будет do..end
синтаксис. Вложенное использование {..}
выглядит ужасно, и его следует избегать. Это следует из рубинового способа «уродливый код должен выглядеть уродливым».
Существует некоторый дополнительный синтетический сахар, который можно применять, чтобы избежать использования блоков любого типа, но это своего рода выходит за рамки вопроса.
Если бы я лично написал это заявление, я бы предпочел что-то вроде этого:
colors.each do |sub_arrays|
sub_arrays.each { |items| puts items }
end
или ...
colors.each do |sub_arrays|
sub_arrays.each do |item|
puts items
end
end
Но я бы определенно избегал использования вложенных фигурных скобок. Я не верю, что кто-то согласится с тем, что сохранение одинакового отступа во внутреннем цикле - это «правильный» способ сделать это. Последовательный end
на том же уровне отступа выглядит плохо и пахнет плохим форматированием.