On Nov 11, 2011, at 11:07 AM, Allen Wirfs-Brock wrote:

> On Nov 11, 2011, at 10:52 AM, Axel Rauschmayer wrote:
> 
>> Got it, related to what you solve in generic classes with This-types 
>> (covariance vs. contravariance...).
>> 
>>   // assume |this| is the source collection
>>   if (this[Array.derivedArrayKey]) A = this[Array.derivedArrayKey](); else A 
>> = [ ];
>> 
>> Another possibility:
>> 
>>   if (this[Array.derivedArrayKey]) {
>>       A = this[Array.derivedArrayKey]();
>>   } else if (typeof this.constructor === "function") {
>>       A = new this.constructor();
> 
> In Smalltalk the default implementation of species is:
> species
>   ^self class
> 
> which is pretty much the moral equivalent of:  this.constructor.
> 
> However, that might introduce backwards compatibility issues for existing 
> code which has constructors but currently always produces Array instances 
> from these functions. 

Right, this was what Alex Russell and I realized and sighed about, after first 
hoping we could use this.constructor.


> 
>>   } else {
>>       A = [ ];
>>   }
>> 
>> Creating a subclass this way (i.e., using @derivedArrayKey) produces code 
>> whose meaning is more obvious (to me) than the code below.
> 
> I just wanted to dash out the most directly extensions of Jake's original 
> code that would exhibit the concept.  Ultimately, it's a matter of defining a 
> method using which ever formulation you prefer (and which gets adopted into 
> the language)

We should probably think about a systematic naming convention (and location 
convention) for these built-in private name objects.

/be

> 
>> 
>>>>> function createArraySubclass(proto,...values) {
>>>>> return proto <| [...values].{
>>>>>       [Array.derivedArrayKey](){return proto<| [ ]}
>>>>> }
>>>>> }
> 
> Allen
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to