3

在 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))
4

2 回答 2

3

int如果要检查字符是否在某个范围内,可以使用强制转换:

(let [zero (int \0)
      nine (int \9)]
  (defn is-digit? [c] (<= zero (int c) nine)))

Character.isDigit或者,如果您只需要检查数字,您可以直接调用该方法。显然,这不适用于不是预定义字符类的范围。

于 2013-09-04T21:55:21.207 回答
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)))
于 2013-09-04T22:35:47.893 回答