Я использую реагент для создания нескольких альтернативных корневых компонентов, только один из которых будет смонтирован на любой заданной странице; однозначно или/или. Они имеют определенную степень общности в своем составе, поэтому будет удобно переместить то, что является общим для них, в пространство имен common
.
Было бы идеально, если бы в файле для каждого из этих компонентов у меня была возможность переключить пространство имен на common
и добавить конкретное defs
к компоненту, а затем переключиться обратно, таким образом избегая циклических зависимостей и не требуя какого-либо наследования.
Я вспомнил, что это возможно в Common Lisp, как это было замечательно, и это также кажется возможно в clojure.
Из документов Clojurescript: ns
должна быть первой формой и может использоваться только один раз , а in-ns
можно использовать только из реплики.
Мне интересно, есть ли способ добиться такого в clojurescript, который все еще ускользает от меня.
Если нет, мне, возможно, придется пересмотреть свои предположения относительно нескольких альтернативных корневых компонентов; идея множества сборок в рамках одной сборки, если это имеет смысл.
Обновление после некоторых дальнейших экспериментов и путаницы: другой вариант может состоять в том, чтобы разделить одно пространство имен на несколько файлов (это возможно?). Не знаю, в каком направлении здесь повернуть.
Тот факт, что в реагенте я использую атомы в глобальном пространстве имен, создает потребность в циклических зависимостях, если я использую отдельное пространство имен для общего. Следовательно, задумайтесь об одном глобальном пространстве имен, и в этом случае могут помочь несколько файлов. Или путь вперед один гигантский файл и одно пространство имен??
Обновление: я понял, что существует большое противоречие между глобальным сохранением всего состояния приложения (в моем текущем случае — нескольких атомов) и передачей состояния приложения. Мой шаблон в настоящее время является глобальным, не передавайте ничего из этого. Передача необходимого состояния в качестве параметров в fns в пространстве имен common
решила бы здесь проблему (ага!), но тогда возникает вопрос, какие принципы здесь соблюдаются в отношении состояния приложения. Если бы я просто добавлял параметр всякий раз, когда он мне нужен, но начинал с идеи, что все глобально, в этом не было бы никакого реального принципа...