在C ++世界中,我可以这样做(字符具有可比性):
bool isDigit(char c) {
return '0' <= c && c <= '9';
}
在Clojure中,我可以比较相等,但可以比较少:
(= \a \b) ; [compiles] false
(< \a \b) ; java.lang.Character cannot be cast to java.lang.Number
如何在Clojure中实现这一点?如何检查范围内的角色?我可以用这样的重量级风格做到这一点:
(defn isDigit [c] (#{\0 \1 \2 \3 \4 \5 \6 \7 \8 \9} c))
答案 0 :(得分:3)
如果你想检查角色是否属于某个范围,你可以使用int
强制:
(let [zero (int \0)
nine (int \9)]
(defn is-digit? [c] (<= zero (int c) nine)))
或者,您可以直接调用Character.isDigit
方法,如果您需要检查的是数字。显然,这不适用于非预定义字符类的范围。
答案 1 :(得分:3)
(defn digit? [c] (and (>= 0 (compare \0 c))
(>= 0 (compare c \9))))
(defn digit?? [c] (= (java.lang.Character/getType ^Character c)
(java.lang.Character/DECIMAL_DIGIT_NUMBER)))
(defn digit??? [c] (re-find #"\d" (str c)))