摘要:鏈式代碼通常要求操作有返回值,但對于很多操作大都是型,什么也不返回,這樣就很難鏈起來了我們在中這樣來寫語法實例放入中是推薦的寫法,也就是前面加上訪問一個類的內部類用如下形式
Clojure使用Java方法
Clojure有個很強大的功能,就是你可以使用Lisp語言風格無縫調用java api(java interop).這無疑是如虎添翼.
調用一個Java對象的方法語法:
.method-name object-value args ...
user=> (.toUpperCase "hello,clojure") "HELLO,CLOJURE" user=> (.indexOf "hello,clojure" "j") 9 user=> (. "hello,clojure" indexOf "j") 9 com.lightsword=> (.. System (getProperties)(get "os.name")) "Mac OS X" com.lightsword=> (.substring "hello,clojure" 6) "clojure"
其實都使用的是dot operator,形如:
(. object-expr-or-classname-symbol method-or-member-symbol optional-args*)設置一個Java對象的公有成員變量
語法如下:
(set! (.member-variable object-variable) new-value)
比如
user=> (import java.awt.Point) java.awt.Point user=> (let [pt (Point. 0 10)] #_=> (set! (.y pt) 100) #_=> (.y pt)); 100調用靜態公有成員變量/函數
用/分開類和成員
user=> (java.lang.Math/abs -3) 3 user=> (java.lang.Math/pow 2 10) 1024.0創建一個對象
兩種方法
(Class-name. arg1 arg2 ...)
注意,類名后面有個.(a dot)這個最常用;
還有就是
(new Class-name arg1 arg2 ...)
new的后面類名,構造函數里面的參數不需要使用括號()
user=> (String. "Clojure!") "Clojure!" user=> (new String("Clojure")) ClassCastException java.lang.String cannot be cast to clojure.lang.IFn user/eval1266 (form-init7793881567968869401.clj:1) user=> (new String "Clojure") "Clojure"連續調用一個對象的方法
將多個操作(多行代碼)通過點號"."鏈接在一起成為一句代碼,我們稱之為"鏈式編程風格"。 鏈式代碼通常要求操作有返回值, 但對于很多操作大都是void型,什么也不返回,這樣就很難鏈起來了.
我們在Clojure中這樣來寫
user=> (doto (java.util.Stack.) #_=> (.push "Hello!") #_=> (.push "Clojure.") #_=> ) ["Hello!" "Clojure."] com.lightsword=> (doto (java.util.HashMap.)(.put "k" 1)(.put "v" 2)) {"v" 2, "k" 1}import java package
語法
(import [package.name1 ClassName1 ClassName2] [package.name2 ClassName3 ClassName4])
實例
user=> (import [java.util Date Stack] #_=> [java.net Proxy URI]) java.net.URI user=> (Date.) #inst "2016-06-28T15:19:05.923-00:00"
放入namespace中是推薦的寫法,也就是前面加上ns:
user=> (ns com.lightsword #_=> (:import [java.util Date Stack] #_=> [java.net Proxy URI]) #_=> ) nil com.lightsword=> (Date.) #inst "2016-06-28T15:21:43.048-00:00"訪問一個類的內部類
用如下形式:
package.class-name$inner-class
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64878.html
摘要:我們的目標是建立對每一種語言的認識,它們是如何進化的,未來將走向何方。有點的味道是堅持使用動態類型,但唯一還收到合理擁泵的編程語言,然而一些在企業的大型團隊中工作的開發者擇認為這會是的一個缺陷。 為什么我們需要如此多的JVM語言? 在2013年你可以有50中JVM語言的選擇來用于你的下一個項目。盡管你可以說出一大打的名字,你會準備為你的下一個項目選擇一種新的JVM語言么? 如今借助來自...
摘要:直到上個月重新發現的組合自然是大名鼎鼎的,多年來一直享有真正程序員最佳的美譽,但直到這個的出現和接近成熟,它的威力才能被我們享有。完全與一致水平并集成的調試能力。使用了一個多月,對這套感覺仍然好極了,的最佳開發環境,沒有之一。 幾乎從 Clojure 誕生時候起,它的標準開發環境就是 Emacs,對 Lisp 的親近感、slime 對 Lisp 系列語言的支持、paredit 等 Li...
摘要:的解法程序猿的世界,代碼說明一切,我們直接上代碼吧,算法的入口是一個名為函數不知道能完全看懂上面代碼的人有多少。程序猿的語言世界真的好復雜 首先聲明一點,這篇短文不是要挑起語言之間的關于孰優孰劣的論戰,只是希望通過一個小需求,讓大家能夠對比體會一下函數式編程和面向對象編程的差異(包括理念和語法上的)。 Clojure 是什么? Clojure 是運行在 Java 虛擬機(J...
摘要:根據對社區和新特性的深刻理解,他創作了函數式編程一書。問你在倫敦社區的經歷是否幫助你創作了函數式編程這本書絕對是這樣。我認為引入函數式編程會為很多編程任務提供方便。問之前的是面向對象的,現在全面支持函數式編程。 非商業轉載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/199271 Richard Warburto...
閱讀 3467·2023-04-25 18:52
閱讀 2480·2021-11-22 15:31
閱讀 1218·2021-10-22 09:54
閱讀 3004·2021-09-29 09:42
閱讀 602·2021-09-26 09:55
閱讀 905·2021-09-13 10:28
閱讀 1093·2019-08-30 15:56
閱讀 2105·2019-08-30 15:55