>> print x a b c >>> repr(x) "'a\\nb\\nc'" >>> print -6ren">
gpt4 book ai didi

d - 如何在 D 中打印对象的字符串表示形式?

转载 作者:行者123 更新时间:2023-12-04 22:42:39 25 4
gpt4 key购买 nike

我想做一些等同于 Python 的 repr 的事情:

>>> x = "a\nb\nc"

>>> print x
a
b
c
>>> repr(x)
"'a\\nb\\nc'"

>>> print repr(x)
'a\nb\nc'

我怎样才能在 D 中做到这一点?有没有类似于Python的%r的格式指令?

编辑:我希望能够以转义形式打印字符串以用于调试目的(我刚刚开始学习 D 并且正在编写愚蠢的文本处理函数)。

最佳答案

在 D 中,字符串不是对象,当您使用转义字符时,您实际上存储的是字符而不是转义本身(我希望 Python 也这样做)。因此,如果您想将字符串转换为其转义形式,您需要自己修改输出(我不知道有任何库函数可以做到这一点)。

否则 Objects 可以覆盖 toString() 函数,该函数应生成对象的字符串表示形式。

更新:这是 D 中 repr 的示例。但是请注意,由于原始文本未存储在可执行文件中的任何位置,因此它也会转换文字表示。 Unicode 应该没有问题,因为字符串的正常完整性是完整的。

import std.stdio;
import std.exception;

void main() {
writeln(repr("This\nis\n\t*My\v Test"));
}

string repr(string s) {
char[] p;
for (size_t i; i < s.length; i++)
{
switch(s[i]) {
case '\'':
case '\"':
case '\?':
case '\\':
p ~= "\\";
p ~= s[i];
break;
case '\a':
p ~= "\\a";
break;
case '\b':
p ~= "\\b";
break;
case '\f':
p ~= "\\f";
break;
case '\n':
p ~= "\\n";
break;
case '\r':
p ~= "\\r";
break;
case '\t':
p ~= "\\t";
break;
case '\v':
p ~= "\\v";
break;
default:
p ~= s[i];
break;
}
}

return assumeUnique(p);
}

关于d - 如何在 D 中打印对象的字符串表示形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3955926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com