Ruby中的#tap方法是危险的吗?

时间:2012-10-26 20:49:27

标签: ruby piping

tap方法如何以并发方式工作?如果我这样做,我是否必须担心:

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

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

是否保证#tap块按顺序执行(当然,除非在块内部执行某些异常操作)?

2 个答案:

答案 0 :(得分:11)

Tap不会同时执行块,而是按顺序执行。因此,您不必担心并发问题,因为没有并发问题。

以下是tap的来源:

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

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

答案 1 :(得分:5)

你无需担心。

Ruby执行将是顺序的,除非你做一些事情明确地使它并行(例如创建线程)。