I like the recently introduced ScopedValue type, but found myself wanting to be able to change it’s default value persistently outside of ScopedValues.with calls.
I thought I could achieve this by combining a RefValue and a ScopedValue toghther in a single type and make it behave the way I want it (i.e. act in most situation as a ScopedValue but allow o change its default value persistently).
I put my attempt into this very small package:
and I wanted to get feedback on whether:
There is already a way to achieve this either built in or via other existing packages
What I am doing in that package is either broken, unsafe or wrong in any other way
One of the central premises of ScopedValue is that you observe the same value inside the scoped value as long as you have not executed a with operation along your dynamical execution.
It is totally fine to use a RefValue as a value for a ScopedValue. The only “benefit” I see here is that you avoid sv[][]. I would not implement this by making the default value special, but rather:
struct MutableScopedValue{T}
sv::ScopedValue{RefValue{T}}
end
What I am doing in that package is either broken, unsafe or wrong in any other way
Thanks @vchuravy for the quick reply.
I hadn’t indeed thought about using a RefValue directly.
I updated the package mockup to follow the suggestion you gave but I am not so sure anymore whether it’s indeed worth it over just explicitly asking users to pass a RefValue explicitly to a normal ScopedValue for flags I want to make customizable in my packages.