2013-05-12 56 views
2

(use 'korma.db)(:use korma.db)有什麼區別?幾種調用「使用」的方法?

在功能上他們似乎做同樣的事情,但看起來它是一個函數調用,另一個是解引用地圖?爲什麼有兩種寫作方式,他們最終如何做同樣的事情?

非常感謝!

回答

5

(:use ...)表單是傳遞給ns的指令,而不是地圖的取消引用。 ns是一個宏,所以ns形式的東西不以標準方式評估。 ns形式的:use指令導致ns調用(使用...)。

由於「使用」對您在其中調用ns的所有評估都有影響,因此在聲明名稱空間的上下文中指定它是有意義的,而不是在某個代碼中的其他位置隨機調用它。

+0

啊,我明白了。因此,使用'(:use ...)'實際上在該名稱空間中調用use * only *,因爲它是一個傳遞給宏的指令,而使用'(use'...)'就地調用它(因此它用於repl)? – hurshagrawal 2013-05-12 22:30:55

+2

使用僅影響當前命名空間,但其操作與其所在的命名空間緊密相關,因此最好將其作爲命名空間定義的一部分進行調用。實際上,修改用於在名稱空間中查找定義的規則有什麼用,那麼爲什麼要與它修改的名稱空間的定義分開呢?另外,使用通常被認爲是不推薦的,最好使用:使用:refer參數的require(使用往往會使代碼難以閱讀,因爲在給定函數可能已經被定義的地方,它並不明顯)。 – noisesmith 2013-05-12 22:48:02