On Sun, Jan 31, 2016 at 3:59 PM, Bergi <[email protected]> wrote:
> Jason Orendorff wrote:
>> On Fri, Jan 29, 2016 at 8:14 AM, ` Mystery . <[email protected]> wrote:
>>> IMHO I don't think the default parameters should be evaluated within the
>>> context of the function being called, at least not while it's outside of
>>> function body's region...... Is there a specific reason to do that, or
>>> it's
>>> just a design preference?
>>
>> Sure, there is a reason: it's about how defaults are used.
>>
>> Most defaults are probably constants or empty objects. Those don't
>> need to refer to any variables at all, so we can set them aside.
>
> Well, primitive-valued constants are fine. But if you have an empty object
> constant, which is statically attached to the function instance instead of
> being re-evaluated at every call, that would surely cause enough havoc
> already :-)
I was about to send almost this exact reply. ^_^ This is actually
*very* important, and can't be set aside - Python got it wrong, which
is why if you want an argument to default to an empty list, for
example, you have to do:
def foo(bar=None):
# or any sentinel value, but None is almost always usable
if bar is None:
bar = []
...
Otherwise you get a single array created at function definition time
and shared by all calls that default that parameter. ^_^ JS made the
right ergonomic decision for this, but of course some use-cases are
negatively affected in the trade-off, but none of them are made
impossible, or even difficult, as several people in this thread have
shown.
~TJ
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss