in reply to Re^4: Logical/defined or as lvalue
in thread Logical/defined or as lvalue

That makes PHP's Elvis operator a value-preserving logical-OR operator, like Perl's ||.

According to the article, || also has this function in Common Lisp, Clojure, Lua, Object Pascal, Python, Ruby, and JavaScript. It's rather disingenuous to call the article "Elvis operator".

In C, || is normalizes the value to 0 or 1.

Replies are listed 'Best First'.
Re^6: Logical/defined or as lvalue
by jo37 (Curate) on Sep 04, 2024 at 18:36 UTC

    In retrospective, I shouldn't have brought up || as I don't see any use for an lvalue expression X || Y neither, which would be equivalent to the "Elvis operator".

    A possible novelty could be a binary operator that:

    • acts like defined(X) ? X : Y
    • yields an lvalue, provided X and Y are lvalues
    • evaluates X only once
    If X // Y was an lvalue, it would satisfy these criteria. As it currently isn't, it could hardly break anything as such usage doesn't compile. No new operator, just an extension. In a Perlish sense: One more way to do it.

    Greetings,
    🐻

    $gryYup$d0ylprbpriprrYpkJl2xyl~rzg??P~5lp2hyl0p$

      Everything I said about || also applies to //. You only mention backwards-compatibility which wasn't even an issue I raised.