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

Dan*_*ani 1 string ocaml types char reason

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

gle*_*nsl 7

哎哟,这是一个可怕的解释,我很抱歉你必须阅读.

首先,Char是一个模块,而不是一个类型.该类型被调用char.这可能看起来很迂腐,但是来自面向对象语言的人经常会被专门为某个类型设计的模块混淆,因为它们看起来非常像对象,并且看起来它们应该是对象,因为从OO开始感觉如此自然和方便.但事实并非如此,他们不应该这样做,而且写得不好的文件也无助于强化这种有缺陷的观念.

无论如何,对于实际问题:为什么char类型与类型分开存在string?由于char的是什么strings的由..这不是一个'单字母串’,这封信本身,或者更确切地说,一个字符(这当然是其中名称'char'来自).一个字符串,本质上只是一个arraychar秒.

如果没有这种char类型,你将无法string直接操纵a的元素.除非将字符串比较硬编码到语言中,否则您甚至无法将一个字符串与另一个字符串进行比较.这是一个非常微不足道的问题,需要进行艰难和非明显的权衡,实际上只是将问题转移到难以处理的地方.

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

或者你当然可以做一些像JavaScript和Python这样的动态语言,当行星没有正确对齐时会发生崩溃或表现异常.但我认为你对Reason很感兴趣,因为你已经厌倦了.

  • 这是一个非常好的!文档中使用的词汇确实让我感到困惑.我需要这个较低级别的解释来掌握它的工作方式.感谢您直接设置记录. (2认同)