Как сравнить два символа @ в clojure - PullRequest
0 голосов
/ 28 мая 2019

Пожалуйста, как я могу написать это в ближайшем будущем?У меня есть @ символ, и я хочу сравнить его с "@".

например (= @ "@")

дает ошибку (ClassCastException java.lang.String cannot be cast to java.util.concurrent.Future clojure.core/deref-future (core.clj:2206))

Ответы [ 3 ]

0 голосов
/ 28 мая 2019

В этом сравнении есть свойственный конфликт: "@" - это последовательность символов, а \@ - отдельный символ.Если вы хотите подтвердить, что строка состоит из одного символа, который соответствует символу \@, будет работать что-то вроде следующего:

(let [s "@"]
  (and (= \@ (first s)) (= (count s) 1)))

Однако, если вы хотите определить, содержит ли строка любой \@ символов или, если он просто запустился с \@ символом, для этого требуется другой код.Это проблема сравнения строк и символов - по сути не очевидно, что вам нужно из сравнения.

0 голосов
/ 29 мая 2019

Почему вы получаете ошибку? reader переводит ваш пример в ...

(= (deref "@"))

Функция deref проверяет, является ли аргумент разборчивым (реализующим IDeref).Если нет, он рассматривает аргумент как будущее.Это не так, так что это бросает запутанное исключениеТакое поведение является недостатком, хотя и незначительным.

Кстати, (= x) возвращает true для любого x, если он вообще возвращается.

Ответ Тима Клемонса показывает, что вы можете сделатьоб этом.

0 голосов
/ 28 мая 2019

Yoy может процитировать ваш @, используя \ @ для Clojure, чтобы интерпретировать его как символьный литерал. По умолчанию @ - это макрос считывателя для разыскиваемой формы, который делает многие другие вещи в clojure менее подробными. В любом случае:

(= \@ \@)

true

Если вы хотите проверить, что первый символ строки - это @, тогда:

(= \@ (first "@"))

true

Следующее работает только в Clojurescript, так как оно не имеет символьного типа и использует только строки длиной один.

(= \@ "@")

true ;; in cljs only
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...