为什么单字母字符串会有 Char 类型?

Why is there a Char type for single letter Strings?

单字母字符串有单独的 Char 类型的原因是什么?

哎呀,这是一个糟糕的解释,很抱歉你不得不阅读它。

所以首先,Char 是一个模块,而不是一个类型。该类型称为 char。这可能看起来很迂腐,但是来自面向对象语言的人经常对专门为某种类型设计的模块感到困惑,因为它们看起来非常像对象,并且看起来它们 应该 是对象,因为来自OO的感觉是如此自然和方便。但事实并非如此,他们不应该这样做,而且写得不好的文档肯定不会帮助强化这种有缺陷的概念。

无论如何,对于实际问题:为什么 char 类型与 string 类型分开存在?因为 char 是由 string 组成的。它不是 "single letter string",而是 字母 本身,或者更确切地说 一个字符(这当然是名称'char'的来源)。字符串本质上只是 chararray

如果没有 char 类型,您将无法直接操作 string 的元素。您甚至无法将一个字符串与另一个字符串进行比较,除非将字符串比较硬编码到语言中。即 a non-trivial problem with hard and non-obvious trade-offs,实际上只是将问题转移到了更难处理的地方。

即使您确实有硬编码的字符串比较并且可以使用单字母字符串代替 chars,您现在也没有类型级别保证字符串只包含一个字母,因此必须添加运行时检查以确保字符串不为空或不长于单个字母,如果是则决定如何处理。所有这些检查都会迅速增加显着的性能成本,而隐藏的决策会增加显着的认知负担。

或者,您当然可以像 JavaScript 和 Python 这样的动态语言那样做,即当行星未正确排列时崩溃或出现意外行为。但我假设您对 Reason 感兴趣是因为您已经厌倦了它。