2011-03-02 60 views
6

我怎样才能让toStr[list]获得符号列表并将它们返回为字符串?我想a=1;toStr[{a}]{"a"}将符号转换为字符串而不进行评估

更新03/02:狮子座的食谱工作,也使一个版本,这需要的不是List我做SetAttribute[toStr2,HoldAll];toStr2[a__]:=toStr[{a}]

回答

7

序列可以使用HoldForm

a = 1; b = 2;[email protected][{a, b}] 

这给出{a, b}。为了使之成为toStr功能,你需要设置的属性,使其不评估参数:

ClearAll[toStr]; SetAttributes[toStr, {HoldAll, Listable}]; 
toStr[x_] := [email protected][x]; 
a = 1; b = 2; toStr[{a, b}] 

或者,你可以使用Unevaluated;在上面的代码toStr[x_] := [email protected][x]也可以。

+0

这给出了“{a,b}”'而不是'{“a”,“b”}' – 2011-03-02 08:33:17

+0

所以它确实如此。看起来你也可以通过设置'Listable'属性来改变它(回答编辑) – 2011-03-02 08:37:05

+1

你也可以使用'SymbolName'来提取不合格的符号名称(和'Context'来获取上下文)。 – WReach 2011-03-02 15:17:42