Опасен ли метод #tap в Ruby?

Как tap метод работы параллельно? Должен ли я бояться этого, если я сделаю:

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

что, в настоящем или будущем, Ruby будет пытаться выполнять эти операции одновременно? Ты знаешь, #tap звучит опасно.

Гарантируется ли, что #tap блок выполняется последовательно (если, конечно, внутри блока не происходит что-то необычное)?

2 ответа

Решение

Tap не выполняет блок одновременно, но последовательно. Таким образом, вам не нужно беспокоиться о проблемах параллелизма, потому что нет проблем параллелизма.

Вот источник tap:

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

Итак, вы можете видеть, что сначала он вызывает блок (yield) и только после этого возвращает исходный объект. Здесь нет параллелизма.

Вам не о чем беспокоиться.

Выполнение Ruby будет последовательным, если вы не сделаете что-то, чтобы явно сделать это параллельным (например, создание потоков).

Другие вопросы по тегам