So get() to check if a value is there, and if there is modify a copy then 
overwrite?

If that's the case, it might be worth the mental overhead to use Nullable 
types when mentally I'm viewing everything as a consistently mutating 
object until the desired result is achieved.
 
On Wednesday, September 21, 2016 at 9:49:44 AM UTC-4, Yichao Yu wrote:
>
> On Sep 21, 2016 9:42 AM, "Randy Zwitch" <randy....@fuqua.duke.edu 
> <javascript:>> wrote:
> >
> > I frequently have a design pattern of Union{Title, Void}. I was thinking 
> that I could redefine this as title::Nullable{Title}. However, once I try 
> to modify fields inside the Title type using setfield!(ec.title, k, v), I 
> get this error message:
> >
> > LoadError: type Nullable is immutable while loading In[19], in 
> expression starting on line 4
> >
> >
> >
> > My question is, why is the Nullable type immutable? My original thought 
> was that my Nullable definition was saying "There is either a Title type 
> here or nothing/missing", and maybe I know the value now or maybe I know it 
> later. But it seems the definition is actually "There could be a Title type 
> here or missing, and whatever you see first is what you will always have"
> >
> > Is there a better way to express the former behavior other than as a 
> Union type? My use case is building JSON strings as specifications of 
> graphs for JavaScript libraries, so nearly every field of every type is 
> possibly missing for any given specification.
>
> Assign the whole object instead of mutating it.
>
> >
> > @with_kw type EChart <: AbstractEChartType
> >     # title::Union{Title,Void} = Title()
> >     title::Nullable{Title} = Title()
> >     legend::Union{Legend,Void} = nothing
> >     grid::Union{Grid,Void} = nothing
> >     xAxis::Union{Array{Axis,1},Void} = nothing
> >     yAxis::Union{Array{Axis,1},Void} = nothing
> >     polar::Union{Polar,Void} = nothing
> >     radiusAxis::Union{RadiusAxis,Void} = nothing
> >     angleAxis::Union{AngleAxis,Void} = nothing
> >     radar::Union{Radar,Void} = nothing
> >     dataZoom::Union{DataZoom,Void} = nothing
> >     visualMap::Union{VisualMap,Void} = nothing
> >     tooltip::Union{Tooltip,Void} = nothing
> >     toolbox::Union{Toolbox,Void} = Toolbox()
> >     geo::Union{Geo,Void} = nothing
> >     parallel::Union{Parallel,Void} = nothing
> >     parallelAxis::Union{ParallelAxis,Void} = nothing
> >     timeline::Union{Timeline,Void} = nothing
> >     series::Union{Array{Series,1},Void} = nothing
> >     color::Union{AbstractVector,Void} = nothing
> >     backgroundColor::Union{String,Void} = nothing
> >     textStyle::Union{TextStyle,Void} = nothing
> >     animation::Union{Bool,Void} = nothing
> >     animationDuration::Union{Int,Void} = nothing
> >     animationEasing::Union{String,Void} = nothing
> >     animationDelay::Union{Int,Void} = nothing
> >     animationDurationUpdate::Union{Int,Void} = nothing
> >     animationEasingUpdate::Union{String,Void} = nothing
> >     animationDelayUpdate::Union{Int,Void} = nothing
> > end
>

Reply via email to