2013-11-03 30 views
5

如何在Clojure中將角色轉換爲int?如何在Clojure中將角色投射到int中?

我想在clojure中編寫一個rot 13,所以我需要有東西把我的char轉換爲int。我發現了一種叫做(INT),所以我把:

(int a) 

得到:CompilerException了java.lang.RuntimeException:無法解析符號:一個在這種情況下,編譯:(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) 

那麼什麼是正確的方法呢?

btw,我總是對所有這些clojure語法感到困惑。但我永遠找不到任何來源只能幫我解決我的問題。有什麼建議麼?謝謝!!

+3

我相信你正在尋找一個[「字符文字」(http://clojure.org/reader)如'\了'(錯誤消息說,它想要一個字符,而不是一個整數) 。 – user2864740

+0

謝謝!這解決了我的問題。第一次在stackoverflow,這是一個很好的地方! – zaolian

+1

使用[documentation](http://clojure.org/documentation),特別是關於[reader](http://clojure.org/reader)。 –

回答

8

你在找什麼是字符文字\a。字符文字由單個字符或16位unicode代碼點表示,前綴爲\閱讀器宏。

(int \a) ;; => 97 

(int \0) ;; => 48 

(int \u0030) ;; => 48 


隨着(int a)a是一個符號。因此,運行時嘗試並未能解決該符號綁定的內容。


隨着(int 'a)a也是一個象徵,但是,因爲你宣佈它與單引號(')的象徵,運行時把它從字面上並試圖和zhcon失敗鑄就clojure.lang.Symboljava.lang.Character


(rot13 ''a'),'a'聲明a'作爲符號。但是,額外的'作爲它的前綴使得運行時可以從字面上處理聲明a'的表達式。 'a'擴展爲(quote a'),因此「字面文字」''a'擴展到列表(quote a')

''a' ;; => (quote a') 

(second ''a') ;; => a' 


隨着(rot13 "a")a是一個字符串。字符串不能轉換爲字符,但可以將其視爲字符集合。所以,(rot13 (first "a"))將按預期工作。

+0

謝謝!這絕對有幫助! – zaolian

+0

只是意識到你編輯後,有更多的東西。這清除了我所有關於數據時間的問題。非常感謝!! – zaolian

7

如果你問得很好,Clojure會自動將字符轉換爲int。它會使用ascii等價(實際上是unicode)轉換它。

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

不過,如果你想轉換一個Clojure的字符,這也是一個號碼爲int或長:

(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 
-1

不知道爲什麼長時間的討論。

(Integer/parseInt s)