2010-08-19 22 views
7

Tôi định nghĩa namespace bên trong một lib clojure không có 'Tại sao việc sử dụng ns/sử dụng với Clojure kỳ lạ?

(ns myproject.hello) 

Nhưng, tôi sử dụng' để sử dụng nó.

(use 'myproject.hello) 

Tại sao điều này? Có logic nào đằng sau chuyện này không? Trong gosh (phương ngữ của chương trình), tôi sử dụng mà không có 'tức là (sử dụng myproject) Tại sao điều này bất thường?

Trả lời

15

Câu trả lời ngắn: ns là macro, vì vậy đối số của nó không được đánh giá. use là một hàm, do đó các đối số của nó phải được trích dẫn để ngăn trình biên dịch đánh giá chúng.

Các chức năng sử dụng/yêu cầu không phải là một phần của thiết kế ban đầu của Clojure, chúng được các cộng tác viên thêm vào. Họ đang cần một đại tu.

3

Cách thành ngữ là:

(ns myproject.hello

(: sử dụng myproject.world))

+0

Ông có thể giải thích tại sao đây là thành ngữ, và những gì là sự khác biệt giữa 'use' và đặt ': use' vào trong' ns'? –

+0

Họ có khá nhiều tác dụng tương tự. Tuy nhiên nó dễ dàng hơn cho cả người đọc mã và các công cụ tự động để xem xét khai báo ns để tìm ra những gì đang được đưa vào, do đó, nó có ý nghĩa cho rằng đó là cách tiếp cận thành ngữ. – mikera

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