<p>Don't you want to use arguments.length instead of function.length? </p>
<div class="gmail_quote">On Jun 9, 2012 6:53 PM, "Irakli Gozalishvili" <<a href="mailto:rfobic@gmail.com">rfobic@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

                <div><span style="font-size:12px">I just noticed strange behavior in spider monkey implementation of rest arguments:</span>
                </div><div><span style="font-size:12px"><br></span></div><div><span style="font-size:12px">(function(a, b, ...rest) {}).length // => 2</span></div><div><span style="font-size:12px"><br></span></div><div>
<span style="font-size:12px">I think ignoring `rest` in length is pretty counter intuitive. For example I have small utility function that</span></div><div><span style="font-size:12px">I use to dispatch depending on argument length.</span></div>
<div><span style="font-size:12px"><br></span></div><div><span style="font-size:12px">var sum = dispatcher([</span></div><div><span style="font-size:12px">  function() { return 0 },</span></div><div><span style="font-size:12px">  function(x) { return x },</span></div>
<div><span style="font-size:12px">  function(x, y) { return x + y },</span></div><div><span style="font-size:12px">  function(x, y, z) { return Array.prototype.slice.call(arguments, 1).reduce(sum, x) }</span></div><div><span style="font-size:12px">]) </span></div>

                <div><div><br></div><div><span style="font-size:12px">This behavior of rest would obviously break assumptions made by this library. That being said I don't think `3` would be any better. Maybe such functions length should be:</span></div>
<div><span style="font-size:12px"><br></span></div><div><span style="font-size:12px">- Infinity ?</span></div><div><span style="font-size:12px">- 2.5 ?</span></div><div><span style="font-size:12px"><br></span></div><div><span style="font-size:12px">That way libraries would be able to handle them in a nice way:</span></div>
<div><span style="font-size:12px"><br></span></div><div><span style="font-size:12px">var sum = dispatcher([</span></div><div><span style="font-size:12px">  () => 0,</span></div><div><span style="font-size:12px">  (x) => x,</span></div>
<div><span style="font-size:12px">  (x, y) => x + y,</span></div><div><span style="font-size:12px">  (x, ...rest) => rest.reduce(sum, x)</span></div><div><span style="font-size:12px">])</span></div><div><span style="font-size:12px"><br>
</span></div><br clear="all">Regards<br><span style="color:rgb(153,153,153)">--</span><br style="color:rgb(153,153,153)"><span style="color:rgb(153,153,153)">Irakli Gozalishvili</span><br style="color:rgb(153,153,153)"><span style="color:rgb(153,153,153)">Web: <a style="color:rgb(153,153,153)" href="http://www.jeditoolkit.com/" target="_blank">http://www.jeditoolkit.com/</a></span><font color="#999999"><br>
</font><div><br></div></div>
            <br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div>