Я отлаживаю некоторый код с бесконечным циклом, но это сложно, потому что я не могу получить никаких сообщений журнала. Здесь нет упрощенного случай:Консоль регистрации в вяжете с бесконечной петлей
import Debug exposing (log)
f x =
let _ = log "Hello, world!"()
in f x
Если я запускаю это в моих Вязах РЕПЛИ как f()
, она бесконечно петлю и никогда не печатает "Hello, world!"
, как я ожидаю, что это.
Я смотрел на реализацию Debug.log
(после его Native.Debug.log
), но это только кажется, что называть process.stdout.write
или console.log
синхронно, поэтому я удивлен, что я не вижу никакого выхода.
Я не знаю, будет ли Elm проходить оптимизацию, но если это так, присваивание значения игнорируемой привязке, скорее всего, будет оптимизировано. Пробовали ли вы это, не присваивая значение журнала '_'? –
Ну, это не оптимизирует его в не бесконечно-рекурсивном случае: 'f x = let _ = log« Привет, мир! »() в 5', а затем вызов 'f()' делает печать 'Hello, world!' –
@w.brian Правильный компилятор будет только оптимизировать неиспользуемое выражение, если он может доказать, что он не имеет побочных эффектов. Оптимизация 'let_ = side_effecting_expression в foo'' 'foo' была бы очень неправильной оптимизацией. PS: 'let _ = ...' фактически не вводит привязку. – sepp2k