2011-09-08 105 views
0

什麼是在Ruby中完成此操作的簡潔方法? 我只是想等到所有對象都在運行。這似乎太羅嗦了。縮短枚舉代碼

# arr contains objects that respond to running? 
all_running = false 
until all_running 
    sleep 0.5 
    all_running = true 
    arr.each{ |obj| 
     all_running = all_running and obj.running? 
    } 

end 

回答

6
sleep 0.5 until arr.all? &:running? 
+0

&:做什麼? – Morrowless

+0

啊,發現這個http://stackoverflow.com/questions/1961030/ruby-ruby-on-rails-ampersand-colon-shortcut – Morrowless

+1

這是一個更短的方式來編寫'arr.all? {| OBJ | obj.running?}'。 –

0

如何

sleep(0.5) until arr.inject(true) { |all_running, obj| all_running and obj.running? }

+0

你應該在上下文更換你的代碼,它只是取代了內部循環,但你給人的印象是它取代了整個代碼。 –