为什么不将运营商作为关键字和功能?

时间:2015-07-31 11:11:34

标签: grammar

我看到了this问题,这让我感到疑惑。

忽略几乎所有语言都必须向后兼容的事实,我们有什么理由不能将运算符用作关键字和函数,这取决于它是否紧跟一个括号?它会使语法更难吗?

我主要考虑的是python,还有类C语言。

2 个答案:

答案 0 :(得分:1)

Perl做了与此非常相似的事情,结果有时令人惊讶。你会在许多Perl文本中找到关于这个的警告;例如,这个来自标准的分布式Perl文档(man perlfunc):

下面列表中的任何函数都可以在其参数周围使用括号或不使用括号。 (语法描述省略括号。)如果使用括号,简单但偶尔令人惊讶的规则是:它看起来像一个函数,因此它是一个函数,优先级无关紧要。否则它是列表运算符或一元运算符,优先级很重要。函数和左括号之间的空格不计,所以有时你需要小心:
     print 1+2+4;      # Prints 7.
     print(1+2) + 4;   # Prints 3.
     print (1+2)+4;    # Also prints 3!
     print +(1+2)+4;   # Prints 7.
     print ((1+2)+4);  # Prints 7.

一个更令人惊讶的案例,经常会引起新人的注意:

 print
      (a % 7 == 0 || a % 7 == 1) ? "good" : "bad";

将打印0或1。

简而言之,这取决于你的解析理论。许多人认为解析应该是精确且可预测的,即使这会导致令人惊讶的解析(如链接问题中的Python示例,或者更着名的是C ++的most vexing parse)。其他人倾向于Perl的“尽我所能”的理念,尽管结果 - 如上所述 - 有时与程序员的实际意义完全不同。

C,C ++和Python都趋向于“精确和可预测”的理念,现在它们不太可能改变。

答案 1 :(得分:0)

根据语言的不同,未定义()。如果not()没有用某种语言定义,则不能使用它。为什么不用某种语言定义()?因为那种语言的创造者可能不需要这种语言结构。因为让事情变得更简单是更好的。