Hello Everyone,

I am a beginner to Julia and found the following behaviour of the & bitwise and operator rather perplexing.

When I type in the REPL something like:

julia> 1 & 3

Everything goes ok and I get an answer:

1

However, when I type:

julia> &(1, 3)

I get the following error:

ERROR: syntax: invalid syntax &(1, 3) around REPL[3]:1

Stacktrace:

[1] top-level scope at REPL[3]:1

I found this very counter-intuitive, since this syntax is perfectly valid for an operator like +.

So I decide to write the following:

julia> methods(&)

And I get:

# 16 methods for generic function “&”:

[1] &(a::BigInt, b::BigInt, c::BigInt, d::BigInt, e::BigInt) in Base.GMP at gmp.jl:518

[2] &(a::BigInt, b::BigInt, c::BigInt, d::BigInt) in Base.GMP at gmp.jl:517

[3] &(a::BigInt, b::BigInt, c::BigInt) in Base.GMP at gmp.jl:516

[4] &(x::BigInt, y::BigInt) in Base.GMP at gmp.jl:476

[5] &(a::Missing, b::Bool) in Base at missing.jl:159

[6] &(::Missing, ::Missing) in Base at missing.jl:158

[7] &(::Missing, ::Integer) in Base at missing.jl:161

[8] &(b::Bool, a::Missing) in Base at missing.jl:160

[9] &(x::Bool, y::Bool) in Base at bool.jl:40

[10] &(x::T, y::T) where T<:Union{Int128, Int16, Int32, Int64, Int8, UInt128, UInt16, UInt32, UInt64, UInt8} in Base at int.jl:308

[11] &(x::Integer) in Base at operators.jl:515

[12] &(x::T, y::T) where T<:Integer in Base at promotion.jl:394

[13] &(a::Integer, b::Integer) in Base at int.jl:918

[14] &(::Integer, ::Missing) in Base at missing.jl:162

[15] &(left::Base.AbstractCmd, right::Base.AbstractCmd) in Base at cmd.jl:245

[16] &(a, b, c, xs…) in Base at operators.jl:538

I found this really intriguing, since according to this message &(x, y) should be defined for integers. The same does not happen for the other bitwise operators | and \veebar. In those cases I do not get an error.

What is wrong? Is it some bug, is it an intended behaviour, or am I misunderstanding something?