Вот мое понимание того, почему ограничение является на самом деле требованием. Я основываю это на реализации монитора C++, которую я сделал некоторое время назад путем объединения взаимного исключения и условной переменной.
В система mutex+condition_variable=monitor , эти ожидают , вызов устанавливает условную переменную в состояние ожидания и выпускает взаимное исключение. Условная переменная является общим состоянием, таким образом, это должно быть заблокировано для предотвращения условий состязания между потоками, которые хотят ожидать и потоки, которые хотят уведомить. Вместо того, чтобы представить еще одно взаимное исключение для блокировки его состояния используется существующее взаимное исключение. В Java правильно заблокировано взаимное исключение, когда поток about-to-wait владеет монитором.
Это действительно регулярно появляется в списке рассылки, см. , например, эту недавнюю ветку на r-help . Консенсусным ответом обычно является тот, который показан выше: учитывая, что язык не имеет прямой поддержки, вам нужно либо
if (FALSE)
, предложенные ранее, но обратите внимание, что они все еще требуют полного синтаксического анализа и, следовательно, должны быть синтаксически правильными Я могу придумать два варианта. Первый вариант - использовать редактор, который позволяет блокировать комментарии и раскомментировать (например, Eclipse). Второй вариант - использовать оператор if. Но это позволит вам только «прокомментировать» правильный синтаксис R. Следовательно, хороший редактор - это предпочтительный обходной путь.
if(FALSE){
#everything in this case is not executed
}