Вопрос: Как получить текущее значение сигнала в вяжете?


Есть ли способ получить текущее значение данного сигнала? Или, это то, что я не хочу делать при написании идиоматического Вязов?


3


источник


Ответы:


Нормальный код

Вы не должны этого делать при написании идиоматического Вязов.
Также невозможно получить текущее значение сигнала. Это будет побочная функция (возвращающая разные значения в разное время выполнения программы), что позволит выявить всевозможные неприятные ошибки. Чтобы сделать что-то со значением на сигнале, вы можете сопоставить сигнал с помощью Signal.map но я подозреваю, что вы уже знаете это.

тестирование

Если вы спрашиваете об этом для целей тестирования, а не о нормальном коде, вы можете взломать ограничение, используя технику, используемую в пакете Apanatshka / вяз-сигнал дополнительный  для записи тестов для связанных с сигналом функций. (Обратите внимание, что, хотя я являюсь автором этого пакета, наградность системы тестирования должна идти rgremple  для понимания и содействия этому)


4



То, как я это понимаю, понятие «текущая ценность» не имеет смысла в Вязе.

Конечно, если вы Signal.map функцию над сигналом, вы можете сказать, что эта функция всегда будет получать «текущее значение», но я не думаю, что это то, что вы имели в виду.

Идея «текущей стоимости» предполагает время. Это связано с идеей иметь «до того, как я попрошу текущее значение» и «после того, как я попрошу текущее значение». Это то, что вы можете найти на императивном языке, но Elm является декларативным, и поэтому концепция до и после не имеет никакого значения.


2