发布了关于链式比较运算符以及如何用不同语言解释它们的question。
链接比较运算符意味着(x < y < z)
将被解释为((x < y) && (y < z))
而不是((x < y) < z)
。
对该问题的评论表明,Python,Perl 6和Mathematica支持链接比较运算符,但其他语言支持此功能以及为什么它不常见?
快速浏览一下Python文档,可以看出这个功能至少从1996年开始。有没有更多语言没有添加这种语法的原因?
静态类型语言会出现类型转换问题,但还有其他原因这种情况不常见吗?
答案 0 :(得分:12)
这种好处太小,无法证明使语言复杂化。
你不经常需要它,并且很容易用更多的字符干净地获得相同的效果。
答案 1 :(得分:9)
它应该更常见,但我怀疑它不是因为它使解析语言更复杂。
优点:
缺点:
至于为什么不,我的猜测是:
答案 2 :(得分:3)
Scheme(以及可能大多数其他Lisp系列语言)在其语法中有效地支持多重比较:
(< x y z)
这可以被认为是具有三个参数的<
函数的普通函数应用程序。请参阅规范中的6.2.5 Numerical Operations。
Clojure也支持chained comparison。
答案 3 :(得分:2)
自20世纪60年代后期以来,链式比较是BCPL的一个特征。
答案 4 :(得分:1)
我认为ICON是拥有此功能的原始语言,而在ICON中,它不会将布尔值作为特殊的“失败”标记处理,并将所有其他值视为真。