2011-03-02 61 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