プロジェクトを 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
右結合性が原因である場合、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 で式の計算方法が異なる理由を説明できる人はいますか?