выход из .each {} повторение рано в Ruby

Мой плагин searchInRuntime имеет a: SP и a: Vsp управляет, чтобы это добилось цели, когда названо пьяный. Однако файлы должны существовать.

39
задан BuddyJoe 14 October 2009 в 18:56
поделиться

7 ответов

Хотя решение break работает, я думаю, что более функциональный подход действительно подходит для этой проблемы. Вы хотите взять первые 10 элементов и распечатать их, поэтому попробуйте

items.take(10).each { |i| puts i.to_s }
60
ответ дан 27 November 2019 в 02:07
поделиться

В Ruby нет оператора ++ . Также принято использовать do и end для многострочных блоков. Изменение решения дает:

c = 0  
items.each do |i|  
  puts i.to_s    
  break if c > 9
  c += 1 
end

Или также:

items.each_with_index do |i, c|  
  puts i.to_s    
  break if c > 9
end

См. each_with_index , а также Программирование Ruby Break, Redo и Next .

Обновление: Ответ Чака с диапазонами более похож на Ruby, а ответ nimrodm с использованием take еще лучше.

47
ответ дан 27 November 2019 в 02:07
поделиться

break работает для раннего выхода из цикла, но более идиоматично просто выполнить items [0..9] .each {| i | помещает i} . (И если все, что вы делаете, это буквально печатает элементы без каких-либо изменений, вы можете просто сделать put items [0..9] .)

7
ответ дан 27 November 2019 в 02:07
поделиться

Другой вариант -

items.first(10).each do |i|
  puts i.to_s
end

Это читается мне немного легче, чем нарушение работы итератора, и сначала вернет столько элементов, сколько доступно, если их недостаточно.

4
ответ дан 27 November 2019 в 02:07
поделиться

Это похоже на то, что вы хотите?

10.times { |i|
  puts items[i].to_s
}
1
ответ дан 27 November 2019 в 02:07
поделиться
items.each_with_index { |i, c| puts i and break if c <= 9 }
0
ответ дан 27 November 2019 в 02:07
поделиться

Другой вариант:

puts items.first(10)

Обратите внимание, что это отлично работает с массивами менее 10 элементов:

>> nums = (1..5).to_a
=> [1, 2, 3, 4, 5]
>> puts nums.first(10)
1
2
3
4
5

(Еще одно замечание, многие люди предлагают некоторую форму put i.to_s , но в таком случае не является ли .to_s избыточным? put автоматически вызовет .to_s для нестроковой распечатайте, подумал я. Вам понадобится .to_s , если вы хотите сказать, что ставит 'A' + i.to_s или что-то подобное.)

4
ответ дан 27 November 2019 в 02:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: