2015-06-18 20 views
2

我想弄清楚如何有一個報價塊,當評估時,返回一個符號。看下面的例子。朱莉婭元編程返回符號

function func(symbol::Symbol) 
    quote 
    z = $symbol 
    symbol 
    end 
end 

a = 1 
eval(func(:a)) #this returns :symbol. I would like it to return :a 
z 

回答

5

由於qoute中的最後一個符號在前面沒有$,函數返回符號函數的符號。第二個問題是,你想退回的象徵它的自我,這需要你做出報價內報價類似於此問題 Julia: How do I create a macro that returns its argument?

function func(s::Symbol) 
    quote 
     z = $s 
     $(Expr(:quote, s)) # This creates an expresion inside the quote 
    end 
end 
a = 1 
eval(func(:a)) #this returns :a 
z 
+0

在朱莉婭的新版本有'Base.Meta.quot'功能它將參數表達式封裝到'Expr(:quote,expr)'中,就像這個答案的例子一樣。 – SalchiPapa