每个人都知道,至少在C语言中,您使用printf
函数族来打印格式化的字符串。这些函数使用百分号(%
)表示格式说明符的开头。例如,%d
表示打印一个int
和,%u
表示打印一个unsigned int
。如果您不熟悉printf
函数和格式占位符的工作方式,或者只是需要复习,则Wikipedia文章是一个不错的起点。
我的问题是,这是最初还是将来会被选作格式说明符的原因是否特别引人注目?
显然,该决定是在很久以前做出的(很可能是C语言的前身),从那时起,它或多或少成为“标准”的(不仅在C语言中,而且在许多其他语言中,已经在不同程度上采用了它的语法),所以现在改变为时已晚。但是我仍然很好奇,是否有人对为什么首先要做出这种选择有任何见解,以及如果人们正在设计一种具有类似功能的新语言,是否仍然有意义。
例如,对于C#(和其他.NET语言家族),Microsoft在字符串格式化功能的操作方面做出了稍有不同的决定。尽管可以在此处强制执行某种程度的类型安全(与printf
C中的实现不同),因此没有必要包含相应参数类型的指示,但他们决定使用零索引的花括号对({}
)作为格式说明符,例如:
string output = String.Format("In {0}, the temperature is {1} degrees Celsius.",
"Texas", 37);
Console.WriteLine(output);
// Output:
// In Texas, the temperature is 37 degrees Celsius.
该String.Format
方法的文档包含更多信息,就像这篇文章有关复合格式的一般说明一样,但是确切的细节并不重要。关键是他们放弃了%
用于指示格式说明符开始的长期实践。C语言本来可以轻松使用{d}
和{u}
,但事实并非如此。任何人都对以下原因有任何想法:为什么要回想起这个决定,以及是否应该遵循新的实现方式?
显然,没有可以不必逃避的字符可以选择,以便可以将其包含在字符串本身中,但是仅使用两个就可以很好地解决该问题。还有哪些其他考虑因素?
{u}
代替,%u
但是有什么显着的优势吗?这似乎是一个很大的选择。
{}
语法,以便学习C#的人不会开始学习其他内容?我发现很难相信这是他们设计决策中的重要部分,即使有的话。您能以某种方式备份您的陈述吗?
%
格式,转而使用类似于.NET {}
格式的格式,因为后者提供了更大的灵活性。