Форматирование итерации по многомерным массивам в Ruby - PullRequest
0 голосов
/ 04 июля 2018

Я новичок в кодировании на Ruby, и у меня есть быстрый вопрос об итерации по многомерным массивам. Мне нужно знать, что подходит с точки зрения форматирования. Это мой код для перебора массива 'colors'

colors = [['red','orange'],['purple','blue'],['yellow','green']]
colors.each{ |sub_arrays|
    sub_arrays.each{ |items|
        puts "#{items}"
    }
}

Это код ответа

colors = [['red', 'orange'],['purple','blue'],['yellow','green']]

colors.each do |sub_arrays|

sub_arrays.each do |items|
    puts "#{items}"
end
end

Я спрашиваю, не было ли это просто ошибкой в ​​листе ответов или это действительно то, как вы должны отформатировать этот код. Кроме того, лучше ли использовать ключевые слова "do" и "end", как предполагается, в фигурных скобках? И я должен положить элемент | sub_arrays | или | предметы | на той же строке, что и метод .each? Спасибо!

1 Ответ

0 голосов
/ 04 июля 2018

Форматирование в 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 на том же уровне отступа выглядит плохо и пахнет плохим форматированием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...