如何在Clojure中将字符强制转换为int?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Clojure中将字符强制转换为int?相关的知识,希望对你有一定的参考价值。

如何在Clojure中将字符强制转换为int?

我试图在clojure中写一个rot 13,所以我需要有一些东西将我的char转换为int。我找到了一个名为(int)的东西,所以我把:

(int a)

获取:CompilerException java.lang.RuntimeException:无法解析符号:a在此上下文中,编译:(NO_SOURCE_PATH:13:1)

然后我把:

(int 'a)

获取:ClassCastException clojure.lang.Symbol无法强制转换为`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语法感到困惑。但我永远找不到任何来源只能帮助我解决我的问题。有什么建议?谢谢!!

答案

你要找的是一个字符文字a。字符文字由单个字符或16位unicode代码点表示,前缀为读取器宏。

(int a) ;; => 97

(int ) ;; => 48

(int u0030) ;; => 48

有了(int a)a就是一个象征。因此,运行时尝试并且无法解析该符号绑定的内容。

使用(int 'a)a也是一个符号,但是,因为你用单引号(')声明它是一个符号,运行时从字面上看起来并尝试并将faazxswpoi投射到clojure.lang.Symbol

随着java.lang.Character(rot13 ''a')宣布'a'为一个象征。但是,额外的a'为它添加前缀使得运行时处理从字面上声明'的表达式。 a'扩展到'a',因此“文字文字”(quote a')扩展到''a'列表。

(quote a')

使用''a' ;; => (quote a') (second ''a') ;; => a' (rot13 "a")是一个字符串。字符串不能转换为字符,但可以将它们视为字符集合。因此,a将按预期工作。

另一答案

如果你问得很好,Clojure会自动将字符转换为int。它将使用ascii等效转换它(实际上是unicode)。

(rot13 (first "a"))

但是,如果要将也是数字的Clojure char转换为int或long:

(int a);;=>97
(int );;=>98
(int c);;=>99

非数字字符将转换为(Character/digit 1 10) ;; => 1 (Character/digit 2 10) ;; => 2 (Character/digit 101 10) ;;=> 101

-1

在这种情况下哪个是好的,因为(Character/digit a 10) ;;=> -1 不是一个角色。

-1

也可以方便地注意到(Character/digit -1 10);;=>java.lang.RuntimeException: Unsupported character: -1 将转换为-,尽管我不会过分依赖它:

-1

第二个参数显然是基础。例如:

(Character/digit - 10);;=>-1
另一答案

不确定为什么上面的长时间讨论。

(Character/digit A 16);;=>10

以上是关于如何在Clojure中将字符强制转换为int?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Clojure/Compojure/Ring 中将映射转换为 URL 查询字符串?

使用 LINQ 在一行代码中将 string[] 转换为 int[]

如何在 Clojure 中将 XML 转换为 edn?

如何在 C++ 中将字符串转换为 int?

如何在java中将字符串数组转换为int数组[重复]

如何在 C++ 中将数字字符串转换为 int 数组 [重复]