Operator overloading of &&

As far as I can tell, there is no ability to overload &&. It doesn’t seem to be a function defined in Base as other operators are. I assume this is because it doesn’t behave the way other functions do in that it short circuits (the 2nd argument is lazily evaluated). Is there any way around this?

2 Likes

Found the unusual position of the point by chance:

julia> [true, false] .&& false
2-element BitVector:
 0
 0
1 Like

No, you can’t overload &&.

Hm, I can’t tell for the overloading.
What is then &&. ?
It throws an error in the example above.

julia> Meta.@lower true && false
:($(Expr(:thunk, CodeInfo(
    @ none within `top-level scope`
1 ─     goto #3 if not true
2 ─     return false
3 ─     return false
))))

julia> Meta.@lower true .&& false
:($(Expr(:thunk, CodeInfo(
    @ none within `top-level scope`
1 ─ %1 = Base.broadcasted(Base.andand, true, false)
│   %2 = Base.materialize(%1)
└──      return %2
))))
2 Likes

No, the . above was just finishing the sentence. &&. doesn’t have a meaning in Julia. Like other binary operators, the . goes first: .+ .* .&&

2 Likes

No, it’s not a function at all but rather a control flow syntax similar to if or ? :.

Depends on what you are trying to accomplish. If you are willing to involve macros you have great possibilities to customize the meaning of anything that is syntactically valid.

1 Like