Hãy để chúng tôi nói rằng tôi có một X.clojurescript và một không gian tên X.clojure. Tất cả mọi thứ trong X.clojurescript là mã Clojurescript, mọi thứ trong X.clojure là mã Clojure. Rất tiếc, tôi không thể xác định macro trực tiếp trong Clojurescript, tôi phải xác định macro trong Clojure và sau đó đưa chúng vào không gian tên Clojurescript bằng cách sử dụngTôi làm cách nào để xử lý mã Clojurescript bắt buộc từ các macro Clojurescript?
(ns X.clojurescript.abc
(:require-macros [X.clojure.def :as clj]))
Điều này là tốt. Tuy nhiên, điều gì xảy ra nếu macro (được định nghĩa trong X.clojure) sẽ cần phải tham khảo một cái gì đó được định nghĩa trong một không gian tên Clojurescript (X.clojurescript)? Vấn đề là trình biên dịch Clojure không nhìn vào không gian tên Clojurescript của tôi (một thư mục riêng biệt) khi giải quyết các không gian tên khác.
Tôi đã giải quyết vấn đề này bằng cách tạo một vùng tên trong mã Clojure có cùng không gian tên và định nghĩa cần thiết như tồn tại trong Clojurescript, nhưng điều này có vẻ ngu ngốc. Vì vậy, ví dụ, nếu tôi cần X.clojurescript.abc.y trong macro của tôi, tôi sẽ chỉ tạo ra một không gian tên bổ sung ở phía Clojure để xóa một dummy y trong phiên bản Clojure của tôi là X.clojurescript.abc; loại câm.
Làm cách nào để xử lý macro cần tham chiếu đến nội dung nào đó ở phía Clojurescript?
Tạo macro của bạn sao cho tất cả những thứ bắt buộc từ clojurescript là tham số. Nếu bạn có thể thêm một số mã nó sẽ được dễ dàng hơn nhiều để trả lời truy vấn riêng của bạn – Ankur
Tôi không nghĩ rằng tôi hiểu câu hỏi của bạn. Macro của bạn phải * tạo * mã mà sau đó sẽ được đánh giá bằng clojurescript. Vì vậy, nếu bạn phải tham khảo bất kỳ def clojurescript sẽ không đủ để tạo ra các biểu tượng trong việc mở rộng vĩ mô? – KIMA
'đề cập đến một cái gì đó ở bên Clojurescript' bạn cần rằng tại thời gian mở rộng vĩ mô hoặc điều này sẽ là cái gì đó sẽ được phát ra trong mã đầu ra? – Ankur