Когда использовать восклицательный знак в clojure (или lisp)?
Говорят, что использовать восклицательные знаки при назначении нечистых функций.
Но я не совсем понимаю "нечистые" функции. Являются ли они
- функции изменяют состояние своих аргументов (через reset!, alter, java-object-methods,...)
- возникают побочные эффекты (например, print, spit,...)
- или оба?
Очевидно, что официальный clojure apis не имеет ошибок в каждом случае выше. Интересно, когда я должен положить их и нуждаться в вашей помощи, чтобы сделать мой код более ясным.
Ответы
Ответ 1
Я бы сказал, что вам не нужно ставить !
на каждую нечистую функцию. Сообщество Clojure Руководство по стилю рекомендует:
Имена функций/макросов, которые небезопасны в транзакциях STM должен заканчиваться восклицательным знаком.
Итак, в основном, завершаем функции !
, которые изменяют состояние для атомов, метаданных, варов, переходных процессов, агентов и io.
Благодаря @noisesmith для обновления.