代码之家  ›  专栏  ›  技术社区  ›  Alan Geleynse buhbang

链式比较运算符的语言支持(x<y<z)

  •  19
  • Alan Geleynse buhbang  · 技术社区  · 14 年前

    一个 question 是关于链式比较运算符以及如何用不同语言解释它们的文章。

    链式比较运算符意味着 (x < y < z) 会被解释为 ((x < y) && (y < z)) ((x < y) < z) .

    对这个问题的评论表明,Python、Perl 6和Mathematica支持链式比较运算符,但是还有哪些语言支持这个特性,为什么不更常见呢?

    静态类型的语言在类型转换方面会有问题,但是有没有其他原因导致这种情况不常见呢?

    5 回复  |  直到 7 年前
        1
  •  11
  •   Bruce Armstrong    14 年前

    它应该更常见,但我怀疑这并不是因为它使解析语言更复杂。

    好处:

    • 坚持最小意外原则
    • 减少认知负荷(见前2点)

    • 语法对语言来说更复杂

    至于为什么不,我的猜测是:

    • 语言作者没想到
    • 决定它没有足够的用处来证明
        2
  •  13
  •   starblue    14 年前

    这样做的好处太小,不足以使语言复杂化。

    你不需要经常使用它,而且用几个字符更容易获得相同的效果。

        3
  •  4
  •   Greg Hewgill    14 年前

    (< x y z)
    

    这可以看作是 < 有三个参数的函数。见 6.2.5 Numerical Operations 在说明书里。

    Clojure支持 chained comparison 我也是。

        4
  •  3
  •   Tony Finch    14 年前

    自20世纪60年代末以来,链式比较是BCPL的一个特点。

        5
  •  1
  •   Chris Dodd    14 年前