2
當使用require時,我需要在左括號之前使用引號,但是當我使用ns時:require我不必使用引號。這是爲什麼?使用ns中的require來引用括號definitiion
(ns foo)
(ns user)
(require '[foo :as f]) ;; quote
(ns bar (:require [foo :refer :all])) ;; no quote
我知道報價不計算在括號前面的表達,但不能完全肯定爲什麼需要括號前面的報價,因爲他們沒有表情所以沒有進行評估。
'[foo:refer:all]'和'[foo:as f]'都是表達式,即使是'42'也是一個表達式(在這種情況下自我評估) – noisesmith
對不起,我還沒有哼哼。 [1 2 3]返回[1 2 3],但(1 2 3)返回ClassCastException。我需要'(1 2 3),爲什麼不在數組中的報價?似乎引用或不引用數組表達式總是返回一個數組。爲什麼我必須在需求中使用報價? – Laurent
,因爲當你引用一個表達式時,表達式中的符號不會被評估,「no-such-thing'返回一個有效的符號,'no-such-thing'會拋出一個錯誤(除非先前已經將該符號綁定到def或let等)。我在下面更新我的答案,以包含這部分基本原理,這是我跳過的。 – noisesmith