如何确定角色是否在Clojure的范围内?

时间:2010-02-12 08:15:56

标签: clojure character

我正在尝试编写一个函数来检查某个字符是否在某个十六进制范围内。

我正在尝试下面显示的代码:

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

我假设因为&gt; =运算符需要一个数字,它会尝试输入它。在普通的java中,我可以这样做:

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

2 个答案:

答案 0 :(得分:8)

显式地将其转换为第一个int

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

答案 1 :(得分: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])
 ....