Как узнать текущее значение сигнала в вязах?

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

2 ответа

Решение

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

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

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

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

Насколько я понимаю, понятие "текущая стоимость" не имеет смысла в вязе.

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

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

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