在将项目从 Python 转换为 C# 时,我发现语法系列中有一些有趣的差异。然而我被卡住了,仍然无法理解和理解C#中比较运算符的不同行为。
在消除这种好奇心的过程中,我考虑了一些 C 语法家族的语言;C、C++、C#、Java、Javascript.. 并验证了行为。它是这样发生的:
Let a=2, b=3, c=4, d=5;
现在,考虑以下表达式:
a < a < a // returns true
c < b < a // returns true
c > b > a // returns false
a < c > b // returns false
如果是由于right-associativity,那么 JavaScript 中的以下代码不应该像这样:
console.info(a < false); // returns false
console.info(a < a); // returns false
console.info(a < a < a); // returns true, as opposed to returning false
这是 C/C++ 版本
int main(){
int a=2, b=3, c=4, d=5;
printf("%s\n","false\0true"+6*(a < a < a)); // returns true
printf("%s\n","false\0true"+6*(c < b < a)); // returns true
printf("%s\n","false\0true"+6*(c > b > a)); // returns false
printf("%s\n","false\0true"+6*(a < c > b)); // returns false
return 0;
}
除了在 Python 中,其中
a < a < a // returns false
c < b < a // returns false
c > b > a // returns true
a < c > b // returns true
谁能解释为什么 C 系列语言和 Python 计算表达式的方式不同?