bow = Ribbon(colour='yellow')
tie(bow, old_oak_tree)
for archer in troop:
let bow = get_weapon()
archer.take(bow)
assert bow.colour = 'yellow'
I had just this problem yesterday, and on many other days. However, I don't think the opt-in block scoping would have done much to help.
In my particular case, I had some geographic data in a file. It seemed like a name like 'geo_data' was a good way to refer to the filename with the data. Then it seemed like 'geo_data was a good way to refer to the file handle. Then it seemed like a name like 'geo_data' was a good way to refer to the DataFrame resulting from reading it. Then it seemed like 'geo_data' was a good way to refer to the reformatted data I created in memory. Then it seemed like 'geo_data' was a good name for the file handle to the new file I write in the new format.
Naming things is hard. (I might have exaggerated the specific example).
But not much of the problem had to do with scoping. I pretty much wanted to use all those different meanings in the same scope. And also not use absurdly long names like 'filehandle_for_json_geo_data'. Even if scoping *could* have separated all those uses, it would be kinda terrible code where that same name had all these different meanings nearby, even if in technically different scopes.
--
The dead increasingly dominate and strangle both the living and the
not-yet born. Vampiric capital and undead corporate persons abuse
the lives and control the thoughts of homo faber. Ideas, once born,
become abortifacients against new conceptions.