将符号转换为字符串而不进行求值

发布于 2024-10-20 01:17:06 字数 231 浏览 1 评论 0原文

如何使 toStr[list] 接受符号列表并将它们作为字符串返回?我想要 a=1;toStr[{a}] 给出 {"a"}

更新 03/02:Leo 的食谱有效,为了制作一个采用序列而不是列表的版本,我做了 SetAttribute[toStr2,HoldAll];toStr2[a__]:=toStr[{a}]

How can I make toStr[list] that takes a list of symbols and returns them as strings? I'd like a=1;toStr[{a}] to give {"a"}

Update 03/02: Leo's recipe works, also to make a version which takes a sequence instead of list I did SetAttribute[toStr2,HoldAll];toStr2[a__]:=toStr[{a}]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光礼记 2024-10-27 01:17:06

您可以使用 HoldForm

a = 1; b = 2;ToString@HoldForm[{a, b}]

这给出 {a, b}。要使其成为 toStr 函数,您需要设置属性,以便它不计算参数:

ClearAll[toStr]; SetAttributes[toStr, {HoldAll, Listable}];
toStr[x_] := ToString@HoldForm[x];
a = 1; b = 2; toStr[{a, b}]

或者,您可以使用 Unevaluated;在上面的代码中 toStr[x_] := ToString@Unevaluated[x] 也可以工作。

You can use HoldForm:

a = 1; b = 2;ToString@HoldForm[{a, b}]

This gives {a, b}. To make it into toStr function, you need to set the attributes so that it doesn't evaluate the arguments:

ClearAll[toStr]; SetAttributes[toStr, {HoldAll, Listable}];
toStr[x_] := ToString@HoldForm[x];
a = 1; b = 2; toStr[{a, b}]

Alternatively, you could use Unevaluated; in the above code toStr[x_] := ToString@Unevaluated[x] would work just as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文