我看到了this问题,这让我感到疑惑。
忽略几乎所有语言都必须向后兼容的事实,我们有什么理由不能将运算符用作关键字和函数,这取决于它是否紧跟一个括号?它会使语法更难吗?
我主要考虑的是python,还有类C语言。
答案 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()没有用某种语言定义,则不能使用它。为什么不用某种语言定义()?因为那种语言的创造者可能不需要这种语言结构。因为让事情变得更简单是更好的。