[#20675] RCR: non-bang equivalent to []= — Tobias Reif <tobiasreif@...>

Hi,

49 messages 2001/09/01
[#20774] Re: RCR: non-bang equivalent to []= — Tobias Reif <tobiasreif@...> 2001/09/03

I wrote:

[#20778] Re: RCR: non-bang equivalent to []= — Kevin Smith <kevinbsmith@...> 2001/09/03

--- Tobias Reif <tobiasreif@pinkjuice.com> wrote:

[#20715] oreilly buch von matz - website online — markus jais <info@...>

hi

43 messages 2001/09/02
[#20717] Re: OReilly Ruby book has snail on cover — ptkwt@...1.aracnet.com (Phil Tomson) 2001/09/02

Actually, thanks for posting it here. I was trying to search OReilly's

[#20922] Re: OReilly Ruby book has snail on cover — Paul Brannan <pbrannan@...> 2001/09/05

On Mon, 3 Sep 2001, Phil Tomson wrote:

[#20768] Minor cgi.rb question — "Hal E. Fulton" <hal9000@...>

I don't have much experience with

25 messages 2001/09/03

[#20770] Calling member methods from C++ — jglueck@... (Bernhard Glk)

Some quetsions have been solved for me, but my message system does not

12 messages 2001/09/03

[#20976] destructor — Frank Sonnemans <ruby@...>

Does Ruby have a destructor as in C++?

25 messages 2001/09/07

[#21218] Ruby objects <-> XML: anyone working on this? — senderista@... (Tobin Baker)

Are there any Ruby analogs of these two Python modules (xml_pickle,

13 messages 2001/09/15

[#21296] nested require files need path internally — Bob Gustafson <bobgus@...>

Version: 1.64

29 messages 2001/09/18
[#21298] Re: nested require files need path internally — David Alan Black <dblack@...> 2001/09/18

Hello --

[#21302] Re: nested require files need path internally — Bob Gustafson <bobgus@...> 2001/09/18

On Tue, 18 Sep 2001, David Alan Black wrote:

[#21303] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21306] Re: nested require files need path internally — Lars Christensen <larsch@...> 2001/09/18

On Tue, 18 Sep 2001, Yukihiro Matsumoto wrote:

[#21307] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21331] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/18

> The big difference is C++ search done in compile time, Ruby search

[#21340] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21353] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/18

On Wed, 19 Sep 2001, Yukihiro Matsumoto wrote:

[#21366] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/19

Hi,

[#21368] Re: nested require files need path internally — "Julian Fitzell" <julian-ml@...4.com> 2001/09/19

On 19/09/2001 at 10:12 AM matz@ruby-lang.org wrote:

[#21376] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/19

Hi,

[#21406] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/19

On Wed, 19 Sep 2001, Yukihiro Matsumoto wrote:

[#21315] Suggestions for new CGI lib — anders@... (Anders Johannsen)

From the comp.lang.ruby thread "Minor cgi.rb question" (2001-09-03), I

21 messages 2001/09/18

[#21413] Ruby/objects book in style of The Little Lisper — Brian Marick <marick@...>

I fell in love with Lisp in the early 80's. Back then, I read a book called

36 messages 2001/09/19
[#21420] Re: Ruby/objects book in style of The Little Lisper — Christopher Sawtell <csawtell@...> 2001/09/20

On 20 Sep 2001 06:19:44 +0900, Brian Marick wrote:

[#21479] Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/21

--- Christopher Sawtell <csawtell@paradise.net.nz> wrote:

[#21491] SV: Re: Ruby/objects book in style of The Little Lisper — "Mikkel Damsgaard" <mikkel_damsgaard@...> 2001/09/21

[#21494] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/21

--- Mikkel Damsgaard <mikkel_damsgaard@mailme.dk> wrote:

[#21510] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Todd Gillespie <toddg@...> 2001/09/22

On Sat, 22 Sep 2001, Kevin Smith wrote:

[#21514] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/22

--- Todd Gillespie <toddg@mail.ma.utexas.edu> wrote:

[#21535] irb — Fabio <fabio.spelta@...>

Hello. :) I'm new here, and I have not found an archive of the previous

15 messages 2001/09/22

[#21616] opening a named pipe? — "Avdi B. Grimm" <avdi@...>

I'm having trouble reading from a named pipe in linux. basicly, I'm

12 messages 2001/09/24

[#21685] manipulating "immutable" objects such as Fixnum from within callbacks & al... — Guillaume Cottenceau <gc@...>

Hello,

15 messages 2001/09/25

[#21798] Ruby internal (guide to the source) — "Benoit Cerrina" <benoit.cerrina@...>

Hi,

22 messages 2001/09/28

[ruby-talk:20669] Re: Iterating by links

From: David Alan Black <dblack@...>
Date: 2001-09-01 13:44:07 UTC
List: ruby-talk #20669
Hello --

On Sat, 1 Sep 2001, Joel VanderWerf wrote:

> David Alan Black wrote:
>
> > I'm still playing around with this :-)  but one possible source of
> > problems is that you use a boolean test to end the series... which
> > means, for example, that if you change this:
> >
> >> tree = [[0, [1, 2]], 3, [4, 5, [6]]]
> >
> > to this:
> >
> >   tree = [[0, [1, 2]], 3, [4, 5, [6,7,nil]]]
> >
> > it will not process tree[2][2][2].
>
> Hi, David,
>
> Good point. Maybe it should automatically check for respond_to? before
> sending the message. You can do that manually:
>
> tree = [[0, [1, 2]], 3, [4, 5, [6, 7, nil]]]
> for node in tree.by { |x| x.respond_to?(:at) && x.at(2) }
>   p node
> end
>
> To handle this automatically, maybe catching an exception is faster
> than checking for respond_to? How about this change:
>
>     def each
>       cur = @first
>       if @next_name
>         begin
>           loop do
>             break unless cur


That still has the test-for-nil behavior, though.


>             yield cur
>             cur = cur.send @next_name, *@args
>           end
>         rescue NameError
>         end
>       elsif @next_proc
>     ....

What I'm finding is that it's hard to automate because there are
different things that could cause the exception.  For instance, in
your first example (or some approximation thereof :-)

  list = Foo.new(0, Foo.new(1, Foo.new(2, Foo.new(3))))
  list.by(:next_foo).each do |f|
    p f.value
  end

the problem is that the last Foo's next_foo is nil, so the call to
#value, if allowed to happen, raises an exception.  I don't think the
linked list class should have to figure that out, since its job is
just to cycle through all the next_foo's.  And the last Foo does
respond to next_foo.... it just happens to return nil.

Then there's the kind of case where one types 'att' instead of 'at'.


> Although I wouldn't want to do this without checking somehow that the
> exception was generated by the send in this method, rather than something
> called as a result of the send operation.

Yeah, that :-)

Anyway, for what it's worth, here's what I've been working on/with.
It's sketchy, and it still has the test-for-nil problem.  My goal was
just to tighten it up a little.  Also, I have, at least for testing
purposes, eliminated the calling of the first arg when it's a proc.
(So one of your tests, the f = proc... one, doesn't work with this
version.)  I've also taken it out of Enumerable.

   class LinkedListDelegator
     include Enumerable

     def initialize(first, next_spec, *args, &block)
       @cur = first
       @action = if block then block
		 else proc {|t| t.send(next_spec, *args)}
		 end
     end

     def each
       while @cur           # <---- not good
	 yield @cur
	 @cur = @action[@cur]
       end
       self
     end

   end

   class Object
     def by(next_name = nil, *args, &next_getter)
       LinkedListDelegator.new(self, next_name, *args, &next_getter)
     end
   end


David

-- 
David Alan Black
home: dblack@candle.superlink.net
work: blackdav@shu.edu
Web:  http://pirate.shu.edu/~blackdav

In This Thread