3

方法如何tap并发工作?如果我这样做,我是否必须害怕:

some_object.tap { |o|
  # time-consuming operation 1
}.tap { |o|
  # time-consuming operation 2
}

那,在现在或将来,Ruby 会尝试同时执行这些操作吗?你知道,#tap听起来很危险。

是否保证#tap块按顺序执行(当然,除非在块内做了一些不寻常的事情)?

4

2 回答 2

11

Tap 不会同时执行该块,而是按顺序执行。所以你不必担心并发问题,因为不存在并发问题。

这里的来源tap

VALUE
rb_obj_tap(VALUE obj)
{
    rb_yield(obj);
    return obj;
}

所以你可以看到它首先调用了块(yield),然后才返回原始对象。不存在并发。

于 2012-10-26T20:55:50.787 回答
5

你没有什么可担心的。

Ruby 执行将是顺序的,除非您明确地使其并行(例如创建线程)。

于 2012-10-26T20:55:20.860 回答