Załóżmy, że mamy 3 zmienne i musimy ZAZNACZAĆ, że mogą one wszystkie być równe -1 lub żadna nie może być równa -1. Napisałem poniższy kod:Ocena potrójnej równości
x := 1;
y := 1;
z := 1;
ASSERT((x = -1) = (y = -1) = (z = -1));
Często piszę ten rodzaj czeku, ale dla dwóch zmiennych. Co zaskakujące, zestawiono również potrójne porównanie, ale nie działa zgodnie z oczekiwaniami. Dla wartości (1, 1, 1) oczekuję, że będzie to prawda. Po zastąpieniu wartości zmiennych i uproszczeniu uzyskujemy:
ASSERT(False = False = False);
i pomyślałem, że powinno to być prawdziwe, ale tak nie jest. Jak ocenia się to potrójne porównanie?
Ani? Jak to możliwe z 3 warunkami? –
+1 za niesamowitą ekspresję! Gdybyś miał coś więcej niż wartości boolowskie, otrzymasz błąd kompilatora 'Incompatible types'; I przypuszczam, że jest to sytuacja kluczowa, ponieważ wartości BOOLEAN są rzadko porównywane z operatorem '='. –
Nic nie jest dziwne, False = False jest równe True, a True <> False –