<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 命名空間 Java用class來組織方法, 用包來組織class。Clojure用名字空間來組織事物。“事物”包括Vars, Refs, Atoms, Agents, 函數, 宏 以及名字空間本身。 符號(Symbols)是用來給函數、宏以及binding來分配名字的。符號被劃分到名字空間里面去了。 任何時候總有一個默認的名字空間,初始化的時候這個默認的名字空間是“user”,這個默認的名字空間的值被保存在特殊符號 `*ns*` .里面。默認的名字空間可以通過兩種方法來改變。 `in-ns` 函數只是改變它而已. 而 `ns` 宏則做得更多。其中一件就是它會使得 `clojure.core` 名字空間里面的符號在新的名字空間里面都可見 (使用 `refer` 命令). `ns` 宏的其它一些特性我們會在后面介紹。 "user" 這個名字空間提供對于 `clojure.core` 這個名字空間里面所有符號的訪問。同樣道理對于那些通過 `ns` 宏來改變成默認名字空間的名字空間里面也是可以看到 clojure.core里面的所有的函數的。 如果要訪問哪些不在默認名字空間里面的符號、函數, 那么你必須要指定全限定的完整名字。比如 clojure.string 包里面定義了一個 `join` 函數。它把多個字符串用一個分隔符隔開然后連起來,返回這個連起來的字符串。它的全限定名是 `clojure.string/join` . `require` 函數可以加載 Clojure 庫。它接受一個或者多一個名字空間的名字(注意前面的單引號) ``` (require 'clojure.string) ``` 這個只會加載這個類庫。這里面的名字還必須是一個全限定的報名, 包名之間用.分割。注意,clojure里面名字空間和方法名之間的分隔符是/而不是java里面使用的. 。比如: ``` (clojure.string/join "$" [1 2 3]) ; -> "1$2$3" ``` `alias` 函數給一個名字空間指定一個別名以減少我們打字工作。當然這個別名的定義只在當前的名字空間里面有效。比如: ``` (alias 'su 'clojure.string) (su/join "$" [1 2 3]) ; -> "1$2$3" ``` `refer` 函數使得指定的名字空間里面的函數在當前名字空間里面可以訪問(不用使用全限定名字)。一個特例就是如果當前名字空間有那個名字空間一樣的名字, 那么你訪問的時候還是要制定名字空間的。看例子: ``` (refer 'clojure.string) ``` 現在,上面的代碼可以寫成。 ``` (join "$" [1 2 3]) ; -> "1$2$3" ``` 我們通常把 `require` 和 `refer` 結合使用, 所以clojure提供了一個 `use` , 它相當于require和refer的簡潔形式。 ``` (use 'clojure.string) ``` `ns` 宏, 可以改變當前的默認名字空間。我們通常在一個源代碼的最上面指定這個。它支持這些指令: `:require` , `:use` 和 `:import` (用來加載 Java 類的) 這些其實是它們對應的函數的另外一種方式。我們鼓勵使用這些指令而不是那些函數。 在下面的例子里面 注意 `:as` 給名字空間創建了一個別名。同時注意使用 `:only` 指令來加載Clojure庫的一部分。 ``` (ns com.ociweb.demo (:require 1) ; assumes this dependency: [org.clojure/math.numeric-tower "0.0.1"] (:use 1) (:import (java.text NumberFormat) (javax.swing JFrame JLabel))) (println (su/join "$" [1 2 3])) ; -> 1$2$3 (println (gcd 27 72)) ; -> 9 (println (sqrt 5)) ; -> 2.23606797749979 (println (.format (NumberFormat/getInstance) Math/PI)) ; -> 3.142 ; See the screenshot that follows this code. (<a name="doto">doto</a> (JFrame. "Hello") (.add (JLabel. "Hello, World!")) (.pack) (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE) (.setVisible true)) ``` ![Swing demo](https://box.kancloud.cn/2016-05-04_5729b1320e8c9.png) `create-ns` 函數可以創建一個新的名字空間。但是不會把它變成默認的名字空間。 `def` 在當前名字定義一個符號,你同時還可以給它一個初始值。 `intern` 函數在一個指定名字空間里面定義一個符號(如果這個符號不存在的話) , 同時還可以給它指定一個默認值。注意在 `intern` 里面符號的名字要括起來,但是在 `def` 里面不需要。這是因為 `def` 是一個 special form, special form 不會evaluate它的參數, 而 `intern` 是一個函數, 它會evaluate它的參數。看例子: ``` (def foo 1) (create-ns 'com.ociweb.demo) (intern 'com.ociweb.demo 'foo 2) (println (+ foo com.ociweb.demo/foo)) ; -> 3 ``` `ns-interns` 函數返回一個指定的名字空間的所有的符號的map(這個名字空間一定要在當前名字空間里面加載了), 這個map的key是符號的名字, value是符號所對應的 `Var` 對象, 這個對象表示的可能是函數,宏或者binding。 比如: ``` (ns-interns 'clojure.math.numeric-tower) ``` `all-ns` 函數返回一個包含當前所有的已經加載了的名字空間的集合。下面這些名字空間是默認加載的: `clojure.core` , `clojure.main` , `clojure.set` , `clojure.xml` , `clojure.zip` 以及 `user` . 而如果是在用REPL的話, 那么下面這些名字空間也會被加載: `clojure.repl` 和 `clojure.java.javadoc` . `namespace` 函數返回一個給定符號或者關鍵字的名字空間。 其它一些在這里沒有討論的名字空間相關的函數還包括 `ns-aliases` , `ns-imports` , `ns-map` , `ns-name` , `ns-publics` , `ns-refers` , `ns-unalias` , `ns-unmap` 和 `remove-ns` .
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看