I like the look of this:

>     function add(a,b){
>         return a + b;
>     }
> 
>     add.matches(1,2); // => true
>     add.matches(1); // => false
>     add.matches(1,2,3);  => false


I've never had the need to use function.length, I probably will at some point 
though.

If you did something like this, using the rest argument:

function add( a, b, ...others ) {
    ...
}

Then the following should occur:

add.matches(1,2) // => true
add.matches(1) //=> false
add.matches(1,3,4) //=> true

Tom


On 12 Jun 2012, at 22:57, Russell Leggett wrote:

> On Tue, Jun 12, 2012 at 1:06 PM, Brendan Eich <[email protected]> wrote:
> Russell Leggett wrote:
> It does bring up something else, though, that I've avoided mentioning so far, 
> which is pattern matching. I haven't mentioned it because there is clearly a 
> strawman <http://wiki.ecmascript.org/doku.php?id=strawman:pattern_matching> 
> for it, and that never made it to harmony, but in light of this thread I 
> wanted to reiterate how useful it would be. It would not really help 
> function.length, but would address the real underlying problem that the arity 
> dispatcher is trying to tackle. In a language without overloading, the 
> ability to do pattern matching would be an excellent solution to a very 
> common problem. We already have destructuring, it seems like such a small 
> jump to pattern matching.
> 
> You are preacher, dherman and I are choir. Maybe patterns will make ES7. We 
> shall try again.
> 
> 
> Hard to tell from looking at the strawman why that never made it. If its a 
> matter or feature bloat, I would rate that higher than some other things like 
> default args or array comprehensions.
> 
> See March 2011 TC39 meeting notes, second day.
> 
> Quotes below. Note some fine specimens of TC39's future-proofing 
> fetishization on parade. I will say no more, as I think Dave agrees patterns 
> were not fully baked.
> 
> The way to get refutable matching into ES7 is to work now to address all the 
> valid worries, and say why the other worries are false.
> 
> This thread gave me an interesting idea on how to possibly attack pattern 
> matching in ES6 with no new syntax, and still leave room for more sugar 
> later. It actually comes from thinking about the original issue with 
> function.length and using it for arity-based dispatch. What if we just gave a 
> better method than length? What if we had something like 
> function.matches(args)? Where it would return true if all arguments were 
> bound, and no parameters resulted in an undefined binding.
>     function add(a,b){
>         return a + b;
>     }
> 
>     add.matches(1,2); // => true
>     add.matches(1); // => false
>     add.matches(1,2,3);  => false
> 
> This still suffers from the same problem as function.length, and when dealing 
> with simple arity and no destructuring/rest params, would act exactly the 
> same. However, Irakli's dispatcher utility does lay the groundwork for 
> something more interesting.
> 
>     function makePoint(x,y){ return {x:x,y:y}; }
>     function drawLine({x:x1,y:y1},{x:x2,y:y2}){...}
> 
>     let p1 = makePoint(1,2), p2 = makePoint(3,4);    
>     drawLine.matches(p1,p2); // => true
>     drawLine.matches(1,2); // => false
>     drawLine.matches({x:1}, {y:2}) // => false
>     //only has to be a structural subset
>     drawLine.matches({x:1,y:2,z:3}, {x:1, y:2}) // => true
>     
> With that simple boolean function, Irakli's dispatcher utility could be 
> rewritten to loop through the list and check for a match instead of by arity. 
> It would work correctly for rest parameters, but even more interesting, would 
> work with all of the destructuring patterns.
> 
>     let drawLine = dispatcher(
>         (x1,y1,x2,y2) => ...,
>         ({x:x1,y:y1},{x:x2,y:y2}) => ...
>     );
>     
> Or a more functional replacement for switch
> 
>     let result = match(value, 
>         ({x,y,z}) => "3d"
>         ({x,y}) => "2d"
>         (...anything) => "not a point"
>     );
>     
> Its not as nice as full pattern matching with literals and wildcards, but it 
> could be pretty clean. If guards were added later, that would be an obvious 
> fit. If it became a popular pattern, we could pave the cowpath with some 
> sugar, and add the things that are missing now.
> 
> One of the benefits of getting started this way is that it could be shimmed 
> to just use length.
> 
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to