Giả sử tôi có một loạt các không gian tên (táo, chuối, cam). Trong các không gian tên này, tôi sử dụng macro eat
, gọi (không phải "tạo", gọi) chức năng peel
. Chức năng peel
là khác nhau đối với mỗi loại trái cây, nhưng các macro giống hệt nhau và khá lớn, vì vậy tôi muốn tạo một không gian tên fruit
có chứa macro eat
. Nhưng khi tôi gọi macro eat
từ không gian tên apple
, macro eat
phải gọi hàm apple/peel
.Câu hỏi về không gian tên và macro không gian tên
Để minh họa (nhưng điều này không làm việc):
(ns fruit)
(defmacro eat [] (peel))
(ns apple)
(defn peel [] (prn "peeled apple"))
(fruit/eat)
(ns banana)
(defn peel [] (prn "peeled banana"))
(fruit/eat)
Để nhấn mạnh, điều này có nghĩa rằng chức năng vỏ nên được gọi là khi nào, và chỉ khi nào, vĩ mô được mở rộng, như trong ví dụ này.
(ns apple)
(defn peel [] (prn "peeled apple"))
(defmacro eat [] (peel))
(macroexpand-1 '(eat))
Vì vậy, mọi ý tưởng về cách kết hợp macro và đa hình?
Cảm ơn bạn, nhưng thực sự không phải ý của tôi. Nó có được kết quả mong muốn ở đây, nhưng không có trong trường hợp sử dụng thực tế của tôi. –