A different semantics for WeakMap#get default value

Andrea Giammarchi andrea.giammarchi at gmail.com
Mon Jan 16 13:52:17 PST 2012


I think I agree with current wm.get(o, def) which is indeed the one
implemented in Firefox and all other shims I have seen so far ... I don't
agree about the third argument to set it automatically if not there: a bit
too much for a get semantic, imho

On Mon, Jan 16, 2012 at 10:46 PM, Mark S. Miller <erights at google.com> wrote:

> David and Axel, I don't get it. What's wrong with the get with the
> optional default value, as specified by that text and as currently
> implemented by FF? What additional value does this contingent mutation add,
> regardless of how it's packaged? Do you really want "has" to answer true
> for a key merely because a previous get (or setdefault) with that key
> caused a default value to be stored? Axel, does this add enough value to
> expand the API by 25%?
>
>
> On Mon, Jan 16, 2012 at 1:26 PM, Axel Rauschmayer <axel at rauschma.de>wrote:
>
>> A separate method such as the previously mentioned setdefault() provided
>> by Python [1] might answer both Mark’s concerns and yours.
>>
>> [1] http://docs.python.org/dev/library/stdtypes.html#mapping-types-dict
>>
>>
>> On Jan 16, 2012, at 22:21 , David Bruant wrote:
>>
>> > [Specifying the Davids]
>> >
>> > Le 16/01/2012 21:56, Mark S. Miller a écrit :
>> >> I like the idea of the two argument get as proposed by David [BRUANT].
>> >> (In fact, I like it so much that I thought I'd already specified it
>> >> that way ;).) David [HERMAN], I'm glad to see you got it right in your
>> >> suggestion at
>> >> <
>> http://wiki.ecmascript.org/doku.php?id=harmony:weak_maps#alternate_spec_based_on_ff6.0a1
>> >.
>> > Actually, that's not what I meant.
>> > What I meant was to replace the get that is currently where you link to
>> with
>> > ------
>> > get(key, defaultValue = undefined) {
>> >      if (key !== Object(key)) {
>> >        throw new TypeError(...); // key must be an object
>> >      }
>> >      const i = private(this).keys.indexOf(key);
>> >
>> >      if(i < 0 && defaultValue !== undefined){
>> >        this.set(key, defaultValue);
>> >      }
>> >
>> >      return private(this).values[i];
>> > }
>> > ------
>> >
>> > In this version, if the key is not found, the property is set to the
>> > return value.
>> > The return statement returns the value that is there if the key existed
>> > in the map or the default value (which has just been assigned).
>> >
>> > David
>> >
>>
>> --
>> Dr. Axel Rauschmayer
>> axel at rauschma.de
>>
>> home: rauschma.de
>> twitter: twitter.com/rauschma
>> blog: 2ality.com
>>
>>
>
>
> --
>     Cheers,
>     --MarkM
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20120116/3f75008a/attachment.html>


More information about the es-discuss mailing list