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