У меня есть следующий код в одном из моих личных проектов:
def allocate(var, value) # Allocate the variable to the next available spot.
@storage.each do |mem_loc|
if mem_loc.free?
mem_loc.set(var, value) # Set it then break out of the loop.
break
end
end
end
Каждый элемент в массиве хранения является объектом, который отвечает на запрос free? и установить. То, что я пытаюсь сделать, это циклически перемещаться по массиву в поисках следующего свободного (пустого) объекта для установки переменной. Моя проблема в том, что это просто перебирает каждый объект и устанавливает их все. Я неправильно использую функцию break?
Проверяя ее, я вызываю следующее:
store.allocate(:a, 10)
store.allocate(:b, 20)
Таким образом, store[1] должен быть установлен на: b и 20. Но когда я вывожу содержимое, его значение равно 10, как и остальная часть массива.
nums.each {|x| if (x % 2 == 0) then puts "#{x} is even"; break; end }
отлично работает на Ruby 1.8.7. - person Telemachus   schedule 12.08.2010free?
и устанавливается, но циклeach
никогда не прерывается? Это оно? - person Telemachus   schedule 12.08.2010@storage.find(&:free?).set(var, value)
- person Lars Haugseth   schedule 12.08.2010