On Tuesday, 22 February 2022 at 14:13:38 UTC, Dom DiSc wrote:>
On Monday, 21 February 2022 at 09:48:53 UTC, Stanislav Blinov wrote:>
On Monday, 21 February 2022 at 09:29:56 UTC, forkit wrote:>
It seems to me, that D is a language where python like chaining would be right at home.
writeln(1 < 2 < 3 < 4 > 3 == 3); // true
I've no clue whatsoever how to interpret that mess, [...]
it means: eval each operator separately (so the operands in the middle are evaluated twice), then AND all the resulting booleans together and call that the result.
I fully agree with this decision because evaluating an operand twice is a behaviour that could have very bad side effects. E.g. think of this:
if(1 < (x++) < 2)
Evaluating the middle operand twice will increment x by 2!!
As far as I can tell Python does not actually evaluate the middle operand twice. Instead, it evaluates it once and stores the result in a temporary.
>>> def f(): ... print("f") ... return 1 ... >>> def g(): ... print("g") ... return 2 ... >>> def h(): ... print("h") ... return 3 ... >>> f() < g() < h() f g h True