Это версия @generated
. Сгенерированный код очень прост и стабилен.
julia> @generated function setindex(x::NamedTuple,y,v::Val)
k = first(v.parameters)
k ∉ x.names ? :x : :( (x..., $k=y) )
end
julia> @code_warntype setindex((a=2, b=3), 4, Val(:b))
Body::NamedTuple{(:a, :b),Tuple{Int64,Int64}}
2 1 ─ %1 = (Base.getfield)(x, :a)::Int64 │╻╷╷ macro expansion
│ %2 = %new(NamedTuple{(:a, :b),Tuple{Int64,Int64}}, %1, y)::NamedTuple{(:a, :b),Tuple{Int64,Int64}}│┃││╷ merge
└── return %2 ││
julia> @code_warntype setindex((a=2, b=3), 4, Val(:c))
Body::NamedTuple{(:a, :b),Tuple{Int64,Int64}}
2 1 ─ return x