Ruby 缩短枚举代码
在Ruby中实现这一点的简洁方法是什么? 我只想等到所有对象都在运行。这似乎太罗嗦了Ruby 缩短枚举代码,ruby,enumeration,ruby-1.9.2,Ruby,Enumeration,Ruby 1.9.2,在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 怎
# 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
怎么样
睡眠(0.5)直到arr.inject(true){| all| u running,obj | all|u running和obj.running?}
怎么样
sleep 0.5 until arr.all? &:running?
sleep(0.5)直到arr.inject(true){| all_running,obj | all_running and obj.running?}
您应该在上下文中替换代码,它只替换内部循环,但给人的印象是它替换了整个代码。您应该在上下文中替换代码,它只替换了内部循环,但给人的印象是它替换了整个代码。啊,发现这是一种较短的编写arr.all的方法吗?{| obj | obj.running?}
。它是一个符号#to_proc
速记,相当于{i | i.running?}
。这可能是特定于Rails的,只需在irb中尝试:)啊,发现这是一种较短的编写arr.all的方法?{| obj | obj.running?}
。它是一个符号#to_proc
速记,相当于{i | i.running?}
。这可能是特定于Rails的,请在irb中尝试:)
sleep 0.5 until arr.all? &:running?