2010-09-15 27 views
11

Khi tôi yêu cầu thư viện từ ns hình tôi nhận được:Tại sao yêu cầu trong ns hình thức cư xử khác với yêu cầu chức năng

test> (ns test (:require '(clojure.contrib [logging :as log] [sql :as sql]))) 
lib names inside prefix lists must not contain periods 
[Thrown class java.lang.Exception] 

Khi tôi sử dụng chức năng yêu cầu nó hoạt động như mong đợi.

test> (require '(clojure.contrib [logging :as log] [sql :as sql])) 
nil 

Tài liệu cho ns đề cập đến tài liệu về hàm yêu cầu nhưng khi chúng hoạt động khác, điều này hơi khó hiểu.

Trả lời

16

Biểu mẫu ns là macro và do đó không yêu cầu bạn sử dụng 'để báo giá seq được cung cấp.

Một ví dụ từ các tài liệu Clojure:

(ns foo.bar 
    (:refer-clojure :exclude [ancestors printf]) 
    (:require (clojure.contrib sql sql.tests)) 
    (:use (my.lib this that)) 
    (:import (java.util Date Timer Random) 
     (java.sql Connection Statement))) 
+1

Ouch, cắn một lần nữa bằng cách này '' ... Cảm ơn! –

+1

Vâng, nó không phải là rất phù hợp. Tuy nhiên, hướng dẫn chung là sử dụng ns thay vì nhập khẩu, yêu cầu, v.v. luôn tốt hơn nhiều. Bạn có lẽ nên nghĩ đến các biểu mẫu riêng lẻ dưới dạng nguyên thủy cấp thấp và chỉ sử dụng ns. – levand

+5

Điều làm tôi ngạc nhiên là các macro không hỗ trợ biểu mẫu được trích dẫn để nhất quán. Tôi phải đào sâu vào một buổi tối này để tìm ra lý do tại sao. –

Các vấn đề liên quan