🏠 back to Observable

Forced resetting of a mutable variable when one of it's dependencies changes


#1

Hi, I’ve created a small notebook to illustrate my confusion:

tl;dr: I want to reset a mutable variable when one of it’s dependencies changes.


#2

Things are usually simpler if you avoid mutable state. Here’s an alternative:

The toggle_boxes are as before (though, I implemented them by hand rather than using Jeremy’s inputs). Now, though, I’ve combined the Sample and Reset buttons into a single view whose value is the array of observations. When you click Sample, it adds a random observation to the array, and when you click Reset, it clears the observation array.

In addition, since the observations cell references toggle_boxes, the observations are automatically cleared when you toggle a checkbox.

Using the notebook visualizer, we can compare the two approaches.

Before:

After:


#3

Hi Bryan,

Although avoiding mutable state is always the cleaner and less tangled way to go … sometimes you just want some of that dirty, dirty mutability.

Here’s the minimal change your original notebook needs to stop taking samples when you don’t intend to:

In short, because you were referencing toggle_boxes reactively, you were sampling whenever the toggle boxes changed. Directly accessing viewof toggle_boxes.value avoids this unwanted reactivity.


#4

Thank you so much! It took a bit more fenagling to actually get what I wanted, but I was able to fix it up with this.


#5

I really appreciate you showing me the “simplest” way. One slight gotcha: this doesn’t clear the mutable array when I change the toggled boxes.

Thanks again!


#6

I see. (I thought that’s what the “Reset” button was for…)

Here’s an updated diff:

Note how your reset_button cell now also observes toggle_boxes. Whenever the toggle_boxes value changes, the toggle_observations array will be reset as well.


#7

Ah! That’s great. Thanks for explaining how it works; I should have been able to figure this out, apologies.