I would like to overload broadcasted assignment (.=
). What is the correct way to do this, while still using .=
? Is this possible?
.=
is syntactic sugar for a call to broadcast!
, so you could overload broadcast!
.
Hard to say more without knowing what you are trying to accomplish. e.g. give an example of the code you would like to write using .=
, and what you would want it to do.
Not quite. .=
and broadcast!
lower to the same thing. To overload .=
you need to hook into the custom broadcasting machinery.
https://docs.julialang.org/en/v1/manual/interfaces/#man-interfaces-broadcasting
Thanks for the answers, and indeed hooking into the custom broadcasting machinery would solve this (haven’t tried it yet). @stevengj : below a simple example of what we/I are trying to do, basically we want to update interdependent fields of a struct, after initialization.
@with_kw struct Pars
a::Vector{Float64}
b::Vector{Float64} = a .+ 0.5
end
pars = Pars(a=[0.1,0.5,0.8])
pars.a .= [2.0,3.0,4.0]
expected with overload of .=
: b: Array{Float64}((3,)) [2.5, 3.5, 4.5]
Ah, that’s not possible yet. It’ll only become possible with https://github.com/JuliaLang/julia/pull/39473.
If pars.b
must always mirror pars.a
, you could use a “computed” getproperty
overload instead so it’s only created/computed on demand.