2016-11-18 20 views
5

Görünüşte basit bir şey üzerinde sıkışmış durumdayım. Sanırım bazı tanımları var bir ad alanı vardır:Makrodaki sembolü çözme

(ns my-namespace) 

(def my-definition "HELLO") 
(def my-definition2 "HI") 

Şimdi, bir makro my-namespace vars değerini kullanmak istiyorum, ama dinamik sembolleri almak istiyor. Ör

(defmacro my-macro [n] 
    (-> "my-namespace/my-definition" symbol resolve var-get)) 

ancak bir makroda, (sürece ad yüklenen gibi) bir fonksiyonu çalışır şekilde bir sembol alınıyor.

Bir makroda, sembol çözülemiyor. Alıntı ve unquoting denedim ama hala çalışmıyor.

Makroda böyle bir sembolün değerini kullanmak mümkün mü? Öyleyse nasıl?

+3

'my-namespace'' my-macro' genişletilir önce yüklenmesi gerekiyor. Bu böyle mi? – OlegTheCat

+1

Makro ad alanı beyanı için '(ekleme [isim-alanı: refer: all] gerektirir) sorunu çözdü. Eğer bir cevap gönderirseniz, ilginizi çekiyorsa, bazı puanları @OlegTheCat atabilirsiniz. –

cevap

2

sembol, çözülemeyen. Sen

(require 'my-namespace) 

tarafından veya ad alanı bildiriminde ad yükleyebilirsiniz:

(ns macro-expansion-ns 
    (:require [my-namespace])) 
3

bu bir deneyin: Bu tanımlanır ad yüklenmemesi nedeniyle

(defmacro my-macro 
    [str] 
    (-> str symbol resolve deref)) 
+0

Teşekkürler. Ne yazık ki isim alanına ihtiyaç duymadan çalışmaz. –