0
在ns
宏中use
和:use
有什麼區別?使用和:在ns宏中使用有什麼區別
Docs說以下內容:
Use :use in the ns macro in preference to calling this directly
在ns
宏中use
和:use
有什麼區別?使用和:在ns宏中使用有什麼區別
Docs說以下內容:
Use :use in the ns macro in preference to calling this directly
這是一個有點混亂。
在ns
形式,要使用關鍵字版本(:require ...)
,如:
(ns clj.core
(:require [tupelo.core :as t]))
您應該考慮做事情的這種「正常」的方式。
另一個版本,沒有冒號,是功能可以在REPL的情況下,叫你不能或不想使用ns
形式的同名。這看起來像:
> lein repl
user=> (require '[tupelo.core :as t])
nil
user=> (t/append [1 2 3] 4)
[1 2 3 4]
請注意:對於REPL /功能版本,您還必須引用包含命名空間規格的載體。請注意,我們沒有使用:require
引用ns
版本中的規範。
作爲替代方案,如果你已經在編輯器中,只是想在REPL來測試一些快速的,可以切割/從你的文件的頂部進入REPL粘貼整個ns
形式:
> lein repl
user=> (ns clj.core
#_=> (:require [tupelo.core :as t]))
user=>
比手動輸入功能版本更容易且更容易出錯。
對於一個很好的概述,請參閱近期的一篇博客在這裏:https://stuartsierra.com/2016/clojure-how-to-ns.html
另請參閱[這個線程(https://groups.google.com/forum/#!topic/clojure/mIlKaOiujlo)。 –
只需要清楚:使用REPL中的函數形式'(use ...)'和'(require ...)'是完全可以接受的。事實上,在這種情況下它可能是首選。但是在源代碼文件中,除非絕對不可能(例如循環依賴或其他),否則應該將所有內容放在'(ns ...)'格式中。 –