Чтобы добавить ответы Алекса и Стюарта, нельзя сделать символы в Clojure равными identical?
, если они равны =
, в основном потому, что они могут содержать метаданные.Два символа, которые имеют одинаковые компоненты .name
и .namespace
, но разные метаданные, будут =
, но не identical?
.
Вещи можно было бы упорядочить таким образом, чтобы два символа с одинаковыми метаданными, пространством имен иимя всегда будет identical?
, но это (1) два больших хлопот без реальной выгоды (так как у вас все еще будут некоторые символы =
, но не identical?
), (2) вопреки идее, что типы, которыеМожет нести метаданные, как правило, должны сравниваться для значения равенства (в которое метаданные не вносят вклад), в то время как фактическое равенство указателей должно быть зарезервировано для особых ситуаций (в основном, с взаимодействием).
Обратите внимание, что ключевые слова Clojure являются отдельнымкоторый =
действительно эквивалентен identical?
.(Очевидно, что к ним не могут быть прикреплены метаданные.)