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 怎

在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
怎么样

睡眠(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?