Had a conversation about the lambdas do not
capture local variables issue in LCOLONQ's discord
server. In particular, it was pointed out to me by
@liquidcake1 that the value of
Variant variables is itself a
reference.
Before, I was mistakenly under the assumption
that Variants were passed by reference
and other primitive values were passed by value, but
with this explanation it is now clear to me that
everything is passed by value; it just
happens that the value of a Variant is
itself a reference. I think this design is less
confusing than any alternative I can think of.
The documentation for Godot 4.2 is also
consistent with this understanding, though it
doesn't talk about how Variant values
are themselves references:
Lambda functions capture the local environment. Local variables are passed by value, so they won't be updated in the lambda if changed in the local function: