知乎热榜 ( ) • 2024-04-19 19:36
酱紫君的回答

设计有时代局限, 但是绝对没啥问题

你总归是有判定值相等和判定引用相等两个需求的.

要是换一下你又要问 [5] == [5] => false 是不是弱智设计.

这么一来你只能用 java 语言的 a.isTheFuckingValueEquivalentTo(b)了.


编程语言就是编程语言, 你不能用英文语法去理解这里的 is.

自然语言本来语义就很模糊, is 除了 = 还有 的语义, 歧义太多了.

你如果去程序员咖啡厅, 讨厌歧义的服务员应该会问你, 要点 tee xor coffee 吗?


不过这个设计确实还有改进的余地.

比较现代的语言, 比如 C#, Kotlin 等等都晋升了 is 的语义. is 在这些语言中表示模式匹配.

同时 X is value 仍然兼容原来的语义, 表示匹配一个值字面量判等, 否则表示判定是否服从一个模式.

这个语法可以少写大量的 if, containsas, 建议别的语言都跟进抄袭一下.

所以比较现代化的设计应该是 == 判定值相等, === 判定引用相等, is 判定模式是否匹配.