2010-02-12 3 views
5

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

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

(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) 

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

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

ответ

8

явно преобразовать его в ИНТ первый

(<= 0x20 (int current) 0xD7FF) 
3

Chars - это не номера в 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]) 
.... 
Смежные вопросы