On Thu, 01 Jul 1999, Yukihiro Matsumoto wrote: >Hi Clemens, > >In message "[ruby-talk:00407] New feature for Ruby?" > on 99/07/01, Clemens.Hintze / bln.sel.alcatel.de <Clemens.Hintze / bln.sel.alcatel.de> writes: > >|So here are my ideas: > >In summary, your proposal should be: > > (a) make Range be able to iterate reverse order if beg > end. > > (b) make step can be supplied to Range::new. > > (c) add Range#[n] to retrieve n-th item of the iteration. > > (d) make String's magic decrement possible (as magic increment). > >Right? My ideas for the proposal are: That's right. I know I could count on you to simplify and make clear my proposal :-))) But your have forgot one: (e) allow to give the "succ" method (and the corresponding "pred" one) a stepsize as optional argument. > > (a) Range is range, not interval; I think you'd better define > Interval class to do the work. Ahem... <think>, <think>, <think>... Ok! I can understand your reasons. But if so, do you think, it would be useful, to have a build-in syntax for creating an Interval? I very like it to have (a..b).each{...}. But I don't know, whether it is necessary or not. But thinking more and more about it, I think it would be better to have an Interval class and let the Range class be untouched! > > (b) Ditto. There may be the possibility of Range#step. Ok! > > (c) I'm not sure; I'd like to hear others' opinion. I think, if you mean we should have Interval instead of Range, I don't think, it would be necessary to have the "[]" method. :-) > > (d) It's good. The only reason for absence of String's magic > increment is my laziness. I'm happy to add magic decrement > feature to the String class, if somebody supplies me the code > (acutually you already did). But please consider, that "a".pred currently results in "". Whereas "".succ and "".pred cause errors. I don't know, if that implemented behavior is ok, or not. But, nevertheless, please feel free to use it :-))) > >And your proposal > >|Every class which wants to be used as Range, should implement a >|"succ", "pred" and a "compare method" to enable us to detect the end >|of iteration. > >is already there, except "pred" and reverse ordering. No! As I have already mentioned, the current implementation lacks of the optional stepsize argument. I think, that is important. Because only an instance itself nows, how to return the n'th successor. Furthermore it would be more fast than calling the "succ" method n times! > >Concerning Interval, I'm affraid it should be restricted to the numric >intervals. For example, by String's magic increment, "a000" never >reaches "bcde", even though latter is larger lexicographically. It >may raise the problem sometimes. But with numerical values, Intervals >are much easier to operate. Oops! That I have never thought about! But... waitamomentplease... <klickedi> <klackedi> ... :-))))) The same is true for current Range instances. "a000".."bcde" would also not behave as expected... :-P Furthermore I really would not like to restrict it only to numeric arguments. Later I will implement a new class perhaps, which usage as interval could also make sense. So I would like to let the user decide, what class should be used by an Interval. The only requirement would be, that this class have to implement a "succ", "pred" and "cmp" method! > > matz. Thanks for all of your thoughts. I think I will implement an Interval class instead of changing the existant Range class. But I would really need the "succ" and "pred" methods WITH optional stepsize argument. Could we patch these methods to my needs? Cle.