在ruby中通过引用更改值

时间:2013-02-28 10:50:03

标签: ruby

我实现异步线程管理器,我想传递对线程的引用,它应该保存他的工作结果。然后当所有线程完成后,我将处理所有结果。

我需要知道如何使用'参考'。

假设我有变量result(或hash[:result1]),我想把它传递给线程,如

def test_func
 return 777;
end

def thread_start(result)
 Thread.new do
  result = test_func;
 end
end

我希望得到以下结果

result = 555
thread_start(result);
#thread_wait_logic_there
result == 777; #=> true

hash = {:res1 => 555};
thread_start(hash[:res1])
#thread_wait_logic_there
hash[:res1]==777 #=> true

我应该在代码中使用什么才能使其正常工作?

Ruby版本是1.9.3

1 个答案:

答案 0 :(得分:1)

你可以将entrire hash传递给function:

def test_func
  return 777;
end

def thread_start(hash, key)
  Thread.new do
    hash[key] = test_func;
  end
end

然后这将起作用:

hash = {:res1 => 555};
thread_start(hash, :res1)
hash[:res1]==777 #=> true

此外,如果您想确保在计算完成后得到结果,您必须等待线程,如下所示:

hash = {:res1 => 555};
thread_start(hash, :res1).join
hash[:res1]==777 #=> true

编辑:添加密钥,加入