On Jul 11, 2011, at 4:18 PM, Brendan Eich wrote:

> So I think we took the wrong door here. Function.isGenerator by analogy to 
> Array.isGenerator,

"... by analogy to Array.isArray", of course.

/be

> or an isGenerator export from "@iter" (equivalent semantically), is the best 
> way.
> 
> 
>> However, methods are less desirable for class-like categorization because 
>> they require an existence predicated call (f.isFoo && f.isFoo()) which 
>> potentially leads to monkey patching Object.prototype 
>> (Object.prototype.isFoo = function(){return false}).  A truthy data property 
>> is a plausable alternative that avoids the need for monkey patching, but it 
>> doesn't work for value tests.
> 
> Only if you know you have an object. If the predicate you need has signature 
> "any -> boolean" then you want a function.
> 
> 
>> If a value tests can be recast as a class-like categorization then the data 
>> property approach works for it.
> 
> Right, but you can't "recast" for any type of value without writing a prior 
> typeof conjunct. Or did you mean something else by "recast"?
> 
> 
>> Using an alternative prototype for all values in a "subclass" (eg all 
>> generators) seems like a technique that might be plausible in situations 
>> like this.  It is essentially just a way to factor out of each generator the 
>> storage of the true value for the isGenerator property.  It doesn't require 
>> the exposure of a separate Generator constructor. 
> 
> I think this misses the mark. Both Array.isArray in ES5 and 
> Function.isGenerator in ES.next are testing nominal type tag. They are not 
> testing some ad-hoc boolean "tag" that is not reliable and that can be forged.
> 
> 
>> We are trying to generalize to a pattern to apply to all (or at least most 
>> isFoo) situations.  Here is what we seem to have observed so far:
>> 
>> A isFoo method works well for value classification for situations where you 
>> will generally  already know the "class" of the value.
> 
> Agreed.
> 
> 
>> A independent classification function (perhaps hung from a constructor) may 
>> be a good solution when value classification will generally be done in 
>> situations where the "class" of the value is not predetermined.
> 
> Agreed.
> 
> 
>> A truthy isFoo data property works will for class-like categorization as 
>> long as all values that share the same prototype are considered members of 
>> the same category.
> 
> Disagree for the use-cases you applied this to. ES5 mandates a [[Class]] 
> check for Array.isArray, and the impetus there was cross-frame Array 
> classification based on nominal really-truly-built-in-Array type tag.
> 
> Ditto for any isGenerator worth its name, that is, to the extent that the 
> use-case for isGenerator does not simply want to test "is it an iterator 
> factory", which could be a structural or duck-type test.
> 
> /be
> _______________________________________________
> 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