Как определить, находится ли персонаж в пределах диапазона в Clojure? - PullRequest
7 голосов
/ 12 февраля 2010

Я пытаюсь написать функцию, которая проверяет, находится ли символ в определенном шестнадцатеричном диапазоне.

Я пытаюсь код, показанный ниже:

(def current \s)
(and (>= current (char 0x20)) (<= current (char 0xD7FF)))

Я получаю следующую ошибку:

java.lang.ClassCastException: java.lang.Character cannot be cast to 
java.lang.Number (NO_SOURCE_FILE:0)

Я полагаю, потому что оператор> = ожидает число, он пытается набрать cast

(current >= 0x20) && (current <= 0xD7FF)

Ответы [ 2 ]

8 голосов
/ 12 февраля 2010

явно преобразовать его в int сначала

(<= 0x20 (int current) 0xD7FF)
3 голосов
/ 12 февраля 2010

Символы не являются числами в Clojure, хотя их легко преобразовывать в символы с помощью функции int.

(number? \a)       => false
(number? 42)       => true
(number? (int \a)) => true

Для приведения к примитивным типам вы можете использовать функцию с названием нужного типа (см. (find-doc #"Coerce")).

(int (char 0x20))
(float ...)
(map double [1 2 3 4])
 ....
...