2012-02-07 54 views
2

我有像['a'=> false,'b' => false,'c' => false,......]的散列结构。 我的条件是:观察者运行线程数组

  • 我使用多线程的每个元素和运行某些代码段用于制造“假”为true基于一定的条件。
  • 此循环将继续,直到所有元素的值变为“true”或某个“超时”。
  • 我想要一个应该在每个循环中收集这些键值的观察者,这些值的值变为'真',因为我正在为这些'真正'值元素运行另一个代码。

但是,我写的代码没有ruby-ism。感觉就像编写Java代码一样。 请帮助我进行ruby-ism方法。

回答

0

下面是显示从active_support提取的两个哈希值之间差异的代码。

# from https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/diff.rb 
def hash_diff(h1, h2) 
    h1.dup.delete_if { |k, v| h2[k] == v }.merge!(h2.dup.delete_if { |k, v| h1.has_key?(k) }) 
end 

现在你这是你可以用它来检测你的每个循环迭代之间的差异:

previous ||= my_hash 
diff = hash_diff(my_hash, previous) 
puts "Difference: #{diff.inspect}" unless diff.keys.empty? 
previous = my_hash 

请注意,您可能需要使用互斥这个代码,以避免竞争条件和其他令人讨厌错误。