On Mar 21, 2009, at 10:26 AM, Edward Lee wrote:
On Sat, Mar 21, 2009 at 11:57 AM, Brendan Eich <[email protected]>
wrote:
Of course, all the other "array extras" are specified with a
thisArg so
consistency argues that reduce and reduceRight should be specified
that way
too.
I had to remind myself of Dave's analysis/argument, cited in full
above, to
see why we didn't do that.
What exactly was Dave's argument for not including a thisArg? There's
a brief mention of multiple-optional-args-messiness, and then it talks
about a future where other "array extras" don't have a thisArg.
Dave wrote:
So this would mean reduce takes one callback argument and two
optional arguments: thisObject and init. Which one should come
first? The more common one is probably init, but then you separate
the callback arg from the "thisObject" arg, which is maybe okay.
Multiple optional arguments are kinda messy this way...
Indeed the other Array extras take (callback [, thisArg]) where []
means optional, but reduce and reduceRight want an optional
initialValue "fold basis". Without named parameters there's a problem,
since the initialValue is probably more commonly supplied than thisArg
(we intuit, and I think this is true from the reduce uses I've seen,
but more data welcome).
We could surely give reduce the parameters (callback [, initialValue
[, thisArg]]) but as Dave noted this breaks one symmetry (a more
superficial kind than the loss of thisArg? nevertheless...) with the
other Array extras, by not putting the optional thisArg parameter
immediately after callback.
The other way 'round makes the initialValue parameter case have to
supply a dummy thisArg, according to the hypothesis that initialValue
is more commonly supplied in actual use cases.
Then there's the Pythonic argument: "just like Python => Python
community mindshare". Of course Python's reduce is a function, not a
method, but the mapping is straightforward.
/be
_______________________________________________
Es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss