All right, lads, let's move along... Each approach has its benefits and costs, it all depends on what problem you're solving.
Matt, FWIW, I think you'd want to override the `include` method as well, as others a NumberRange with even numbers would "include" 3. At that point you're overriding most of ObjectRange, so I'd probably just start from Enumerable. This is not intended as a dig. -- T.J. On Sep 25, 9:51 pm, "Alex McAuley" <webmas...@thecarmarketplace.com> wrote: > Omg get over yourself you have taken what i said completely the wrong way.. > > What arrogant plug was that?... > > Lets take your code and look at it shall we... > > 30+ lines for no reason other than "Hey look at me, i can write a > function/class in 30 lines that only needs to be 5." > > Chill out dude, i wasn't knocking your code, it was just OTT. > > You can continue to think you are right which is arrogance in itself... > there is more than one way to skin a cat. > > TJ's/My loop that took all of 30 seconds to create is faster no doubt, has > less weight and does the job. I personaly have better things to do than > write some amazing class to achieve what can be done in 30 seconds - > evidently you do not so good luck with that. > > Alex Mcauleyhttp://www.thevacancymarket.com > > ----- Original Message ----- > From: "Matt Foster" <mattfoste...@gmail.com> > To: "Prototype & script.aculo.us" <prototype-scriptaculous@googlegroups.com> > Sent: Friday, September 25, 2009 9:16 PM > Subject: [Proto-Scripty] Re: Range utility increment > > > That only gives you even or odd increments to the top number... > > Incorrect, notice the constructor method? It ensures that the number > given is even such that you'll never get a range of odd numbers. > Granted the last line of the Jojo's question was > > > Let's say count up by 2's: [2,4,6,8,10]. How do you do this? > > Hence why I went with this specific implementation, to demonstrate how > you can create classes that the ObjectRange class can use to create > proper ranges. I didn't feel it was necessary to abstract out the > class such that it covers all bases but demonstrate how to do it one > way and then Jojo could modify for their own purposes. > > > Better to go with my/TJ's loop > > What an arrogant plug of your own spaghetti code and hasty discredit > to my contribution. Exposing your shortfalls isn't difficult, you > aren't creating a range object, completely bypassing the ObjectRange's > functionality and just simply creating a hacked out array. > > So to put the nail in the coffin, here is the classes abstracted out > > var IncrementNumber = Class.create({ > initialize : function(num, increment){ > this.num = num; > this.increment = increment;}, > > succ : function(){ > return this.clone(this.num + this.increment, this.increment);}, > > clone : function(num, increment){ > return new IncrementNumber(num, increment);}, > > toString : function(){ > return this.num;} > }); > > var EvenNumber = Class.create(IncrementNumber, > { > initialize : function($super, num){ > $super(num, 2); > this.num = (num % 2 == 1) ? num - 1 : num;}, > > clone : function(num, increment){ > return new EvenNumber(num);} > }); > > var NumberRange = Class.create(ObjectRange, > { > _each: function(iterator) { > var value = this.start; > while (this.include(value.num)) { > iterator(value.num); > value = value.succ(); > > } > }, > }); > > var bottom = new IncrementNumber(-10, 2); > //var bottom = new EvenNumber(-20); > var top = new EvenNumber(25); > var range = $A(new NumberRange(bottom, top)); > > console.log(range); > > nothing gets me fired up like a flame... > > On Sep 25, 2:25 pm, "Alex McAuley" <webmas...@thecarmarketplace.com> > wrote: > > > > > That only gives you even or odd increments to the top number... > > > WHat if you wanted every 5th number ... > > > Better to go with my/TJ's loop > > > Alex Mcauleyhttp://www.thevacancymarket.com > > > ----- Original Message ----- > > From: "Matt Foster" <mattfoste...@gmail.com> > > To: "Prototype & script.aculo.us" > > <prototype-scriptaculous@googlegroups.com> > > Sent: Friday, September 25, 2009 5:57 PM > > Subject: [Proto-Scripty] Re: Range utility increment > > > I'd just use an 'iterator' class to do this... > > > var EvenNumber = Class.create( > > { > > initialize : function(num){ > > this.num = (num % 2 == 1) ? num - 1 : num; > > }, > > succ : function(){ > > return new EvenNumber(this.num + 2); > > }, > > toString : function(){ > > return this.num; > > } > > }); > > > var bottom = new EvenNumber(1); > > > var top = new EvenNumber(21); > > var range = $A($R(bottom, top)); > > > console.log(range); > > > I had done this to a much greater extent in my date range selector > > gadget. Where it became the master range, held a range of calendar > > objects, which were in themselves ranges of date objects... fun stuff. > > >https://positionabsolute.net/blog/2008/01/google-calendar-date-range-... > > > ps just looking over that, should rename that class to > > "PositiveEvenNumber", only going to work one way, but you get the idea > > > On Sep 25, 4:15 am, "Alex McAuley" <webmas...@thecarmarketplace.com> > > wrote: > > > function everyOther(start, end, increment) { > > > var n; > > > var rv = []; > > > for (n = start; n <= end; n += increment) { > > > rv[rv.length] = n; > > > } > > > return rv; > > > } > > > > Just a mod to make it better to be able to change it to 3's, 4's, 5's > > > > ;) > > > > Alex Mcauleyhttp://www.thevacancymarket.com > > > > ----- Original Message ----- > > > From: "T.J. Crowder" <t...@crowdersoftware.com> > > > To: "Prototype & script.aculo.us" > > > <prototype-scriptaculous@googlegroups.com> > > > Sent: Friday, September 25, 2009 8:29 AM > > > Subject: [Proto-Scripty] Re: Range utility increment > > > > Hi, > > > > > I'm looking for a way to specify that I want to increment by any > > > > value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? > > > > ObjectRange itself is for ranges of consecutive values, but you can > > > get an array of such values by applying Enumerable#collect to a range: > > > > var twos; > > > twos = $R(1, 5).collect(function(x) { return x * 2; }); > > > > ...although frankly I'd probably go with a straight loop like Alex did > > > (although a slightly different one): > > > > function everyOther(start, end) { > > > var n; > > > var rv = []; > > > for (n = start; n <= end; n += 2) { > > > rv[rv.length] = n; > > > } > > > return rv; > > > } > > > > FWIW, > > > -- > > > T.J. Crowder > > > tj / crowder software / comwww.crowdersoftware.com > > > > On Sep 24, 11:15 pm, JoJo <tokyot...@gmail.com> wrote: > > > >http://www.prototypejs.org/api/utility/dollar-r > > > > > From the documentation of the Range utility, it seems like it can only > > > > increment by 1's. For example, $A($R(1,10,true)) gives you: > > > > [1,2,3,4,5,6,7,8,9,10]. > > > > > I'm looking for a way to specify that I want to increment by any > > > > value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Prototype & script.aculo.us" group. To post to this group, send email to prototype-scriptaculous@googlegroups.com To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~----------~----~----~----~------~----~------~--~---