tap
方法如何以并发方式工作?如果我这样做,我是否必须担心:
some_object.tap { |o|
# time-consuming operation 1
}.tap { |o|
# time-consuming operation 2
}
在现在或将来,Ruby会尝试同时进行这些操作吗?你知道,#tap
听起来很危险。
是否保证#tap
块按顺序执行(当然,除非在块内部执行某些异常操作)?
答案 0 :(得分:11)
Tap不会同时执行块,而是按顺序执行。因此,您不必担心并发问题,因为没有并发问题。
以下是tap
的来源:
VALUE
rb_obj_tap(VALUE obj)
{
rb_yield(obj);
return obj;
}
所以你可以看到它首先调用块(yield
),然后才返回原始对象。没有并发存在。
答案 1 :(得分:5)
你无需担心。
Ruby执行将是顺序的,除非你做一些事情明确地使它并行(例如创建线程)。