如何在 Clojure 中将字符转换为 int?
我正在尝试用 clojure 编写一个 rot 13,所以我需要一些东西来将我的 char 转换为 int。我发现了一个叫做 (int) 的东西,所以我输入:
(int a)
Get: CompilerException java.lang.RuntimeException: Unable to resolve symbol: a in this context, compiling:(NO_SOURCE_PATH:13:1)
然后我把:
(int 'a)
获取:ClassCastException clojure.lang.Symbol cannot be cast to `java.lang.Character clojure.lang.RT.intCast (RT.java:1087)
然后:
(rot13 ''a')
获取:ClassCastException clojure.lang.PersistentList 无法转换为 java.lang.Character clojure.lang.RT.intCast (RT.java:1087)
和:
(rot13 "a")
获取:
ClassCastException java.lang.String cannot be cast to java.lang.Character clojure.lang.RT.intCast (RT.java:1087)
那么正确的做法是什么?
顺便说一句,我总是对所有这些 clojure 语法感到困惑。但我永远找不到任何资源只能帮助我解决我的问题。有什么建议么?谢谢!!
最佳答案
如果您请求得当,Clojure 会自动将字符转换为 int。它将使用 ascii 等效项(实际上是 unicode)对其进行转换。
(int \a);;=>97
(int \b);;=>98
(int \c);;=>99
但是,如果您想将也是数字的 Clojure char 转换为 int 或 long:
(Character/digit \1 10) ;; => 1
(Character/digit \2 10) ;; => 2
非数字字符将被转换为 -1
:
(Character/digit \a 10) ;;=> -1
在这种情况下没问题,因为 \-1
不是一个字符。
(Character/digit \-1 10);;=>java.lang.RuntimeException: Unsupported character: \-1
注意到 -
会转换为 -1
也很方便,尽管我不太依赖它:
(Character/digit \- 10);;=>-1
第二个参数显然是base。例如:
(Character/digit \A 16);;=>10
关于clojure - 如何在 Clojure 中将一个字符转换为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749624/