Một namespace sẽ trên thực tế không được tạo ra đơn giản chỉ vì một từ khóa hoặc ký hiệu được gặp đó sẽ "thuộc" với nó, như sự tương tác sau tại một REPL tươi minh họa:
; SLIME 2010-05-06
user> (-> (.getNamespace :user/foo) symbol)
user
user> (-> (.getNamespace :user/foo) symbol the-ns)
#<Namespace user>
user> (-> (.getNamespace :bar/foo) symbol the-ns)
; java.lang.Exception: No namespace: bar found
Tuy nhiên, điều này không phải lo lắng. Trường "không gian tên" của biểu tượng hoặc từ khóa chỉ là một chuỗi được thực hiện; không có tham chiếu quay lại đối tượng vùng tên tương ứng có liên quan ngay cả khi có tồn tại. Trên thực tế, như có thể thấy ở trên, phương thức từ khóa và ký hiệu .getNamespace
trả về một chuỗi và một từ phải nhảy một vài bước nhảy để đến vùng tên thực tế từ đó.
Cố gắng giải quyết một biểu tượng đủ điều kiện không gian tên với chức năng resolve
cũng an toàn. Đó là bất kể không gian tên thực sự tồn tại; nếu không, nil
sẽ được trả lại, như trong trường hợp nó tồn tại, nhưng không giữ Var của tên đã cho. Ngược lại, ns-resolve
sẽ ném một ngoại lệ như trường hợp được đề cập trong đoạn trích từ REPL ở trên nếu nó không thể tìm thấy không gian tên đã cho.
Nguồn
2010-06-08 00:41:09
Tôi đã làm điều này cho những điều nhất định trong quá khứ và không có bất kỳ vấn đề nào. –