【发布时间】:2026-01-08 08:45:01
【问题描述】:
question 发布了关于链式比较运算符以及它们在不同语言中的解释方式。
链接比较运算符意味着(x < y < z) 将被解释为((x < y) && (y < z)) 而不是((x < y) < z)。
关于该问题的 cmets 表明 Python、Perl 6 和 Mathematica 支持链接比较运算符,但还有哪些其他语言支持此功能,为什么它不更常见?
快速浏览一下 Python 文档就会发现,这个功能至少从 1996 年就已经存在。是否有更多的语言没有添加这种语法的原因?
静态类型的语言在类型转换方面会出现问题,但还有其他原因导致这种情况不常见吗?
【问题讨论】:
-
好问题。在我看来,它甚至至少可以向后兼容 Java。 (因为
<和>没有为布尔值定义。) -
我认为这并不常见,因为程序员太习惯
<作为二元运算符了。 -
为什么静态类型的语言会有这个问题?你的意思是什么类型转换?
-
不,您不需要动态输入。首先,静态类型不会阻止布尔运算符。其次,即使这样做,此功能也不需要布尔值上的
<和>,它需要编译器将x > y < z重写为x > y and y < z。您无法通过在布尔值上定义<和>来解决此问题 - 但由于无论如何都没有定义这些(这将是荒谬的),因此可以将此功能添加到例如Java 不会破坏尝试排序布尔值的现有代码。 -
是的,抱歉,我错误地组合了这些问题。它仍然让我想知道为什么这不是更常见的语法。
标签: programming-languages syntax operators