Hi
In message "[ruby-talk:00431] Re: New feature for Ruby?"
on 99/07/07, Clemens Hintze <c.hintze / gmx.net> writes:
>I will certainly send it to you before I give it to a magazin. But the
>problem is... Do you understand German? ;-)
Oh! Why do you know that Ich war fleissig Schuler nicht??? As you
guess, I can't understand German. But please let me know when you
write. I'll try to read that.
>>For such objects, I feel a suitable name is `Sequence' rather than
>>Interval. The name Sequence itself means descrete series, i.e.,
>>enumerable and one dimensional. But Interval reminds me and
>>mathematicians so general region as it may be use to a continuum or a
>>higher dimensional structure. Other opinions?
>
>It seems only mine :-) I think, that Sequence would also be okay,
>perhaps. As I have told you, the name is coming from the Smalltalk
>world not from any logical or even mathematical insight!
My apologies if you feel that I say same things again and again <bow>.
I remember your naming is from Smalltalk. Though it is not bad, I'd
like to name to be more plausible or more intelligible. I believe the
name is very important; The most part of design, I believe, is
choosing the name. A suitable name leads us what feature should be
supported. I use mathematics to name in many case because just I do
not have the sense of word in English. I'm not intending ``the world,
be logical'' :-)
>class or even call that class Sequence! I only want all these features
>build-in into the interpreter, as it should be possible to iterate
>forth and back with every stepsize. *Damned*, every simple BASIC
>interpreter could do that! :-(
Me too. Your opinion is very persuasive. However,
Regarding Integer only, int.step(to, step) can make it:
% ruby -e '10.step(1, -2){|i| p i}'
10
8
4
6
2
%
Is it esoteric?
Nor...
>It really hurts me, that the mighty Ruby have use some esoteric
>methods to archive the same goal :-(
Perhaps, I don't understand the above sentence, maybe.
By the way, I introduce tips to redefine `new' here. You can use it
in order to modify the Range to have some properties (e.g., stepsize)
by specifying them as options.
class Range
class << self
alias __new__ new
private :__new__
def new(first, last, succ = nil, pred = nil, order = nil)
f = first
l = last
res = __new__(f, l)
res.instance_eval{init(f, l, succ, pred, order)}
res
end
end
def init(first, last, succ_proc = nil, pred_proc = nil, order = nil)
@succ_proc = succ_proc
@pred_proc = pred_proc
@order = order
end
private :init
attr_reader :succ_proc, :pred_proc
end
if __FILE__ == $0
p Range.new(1,3)
p Range.new(1,2,3,-3).succ_proc
end