请问怎么写出一个show宏


#1

在clojure这个LISP方言中,可以这样写一个show宏

(defmacro show [x]
`(print '~x "=" ~x))

这个宏返回了一个s-表达式,`的意思是宏模板,这个先不要理
这里~x的意思是解引述,类似于插值$x,’~x是防止对x求值,将x作为符号变量处理,类似esc
请问这个宏在julia中应该怎么写


#2

Meta.quot


#3

macro myshow(x)
return :(println("?=",$x))
end

a=5
b=10
@myshow(a)
@myshow(b)

#------
题主的意思是 结果为 a=5; b=10
也就是对于传递参数,不仅要提取变量值,还要提取变量名自身。

目前,可以用hash或dict;要么从堆栈里“揪”出来(这太麻烦)。

这个问题提到好,看看还有什么好方法?


#4

答案:
#----------------
macro myshow(x)
y=string(x)
return :(println($y," = ",$x))
end
#----------------

a=5
b=10
x=25
y=33
z=“Macro”

@myshow(a)
@myshow(b)
@myshow(x)
@myshow(y)
@myshow(z)