代码之家  ›  专栏  ›  技术社区  ›  tommy chheng

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

  •  6
  • tommy chheng  · 技术社区  · 15 年前

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

    (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)
    
    2 回复  |  直到 15 年前
        1
  •  8
  •   cobbal    15 年前

    首先将其显式转换为int

    (<= 0x20 (int current) 0xD7FF)
    
        2
  •  3
  •   Michał Marczyk    15 年前

    在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])
     ....