[#12073] Re: Ruby is much slower on linux when compiled with --enable-pthread? — "M. Edward (Ed) Borasky" <znmeb@...>

-----BEGIN PGP SIGNED MESSAGE-----

9 messages 2007/09/04

[#12085] New array methods cycle, choice, shuffle (plus bug in cycle) — David Flanagan <david@...>

Four new methods have been added to Array the Ruby 1.9 trunk. I've got

81 messages 2007/09/06
[#18036] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Charles Oliver Nutter <charles.nutter@...> 2008/07/31

Restarting this thread because I missed it the first time around and

[#18037] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Yukihiro Matsumoto <matz@...> 2008/07/31

Hi,

[#18038] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — "Gregory Brown" <gregory.t.brown@...> 2008/08/01

On Thu, Jul 31, 2008 at 7:50 PM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:

[#18046] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Michael Neumann <mneumann@...> 2008/08/01

Gregory Brown wrote:

[#18048] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Charles Oliver Nutter <charles.nutter@...> 2008/08/01

Michael Neumann wrote:

[#18051] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — "David A. Black" <dblack@...> 2008/08/01

Hi --

[#18053] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — "Wilson Bilkovich" <wilsonb@...> 2008/08/01

On 8/1/08, David A. Black <dblack@rubypal.com> wrote:

[#18074] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — David Flanagan <david@...> 2008/08/01

Wilson Bilkovich wrote:

[#18080] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Yukihiro Matsumoto <matz@...> 2008/08/02

Hi,

[#18097] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — "Pit Capitain" <pit.capitain@...> 2008/08/03

2008/8/2 Yukihiro Matsumoto <matz@ruby-lang.org>:

[#18040] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Jim Weirich <jim.weirich@...> 2008/08/01

On Jul 31, 2008, at 7:33 PM, Charles Oliver Nutter wrote:

[#18056] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Thomas Enebo <Thomas.Enebo@...> 2008/08/01

Jim Weirich wrote:

[#18059] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Jim Weirich <jim.weirich@...> 2008/08/01

On Aug 1, 2008, at 1:53 PM, Thomas Enebo wrote:

[#12096] Next 1.8.6 on Sept. 22 — Urabe Shyouhei <shyouhei@...>

Hi all.

28 messages 2007/09/09

[#12201] how about actors implemented in ruby-core itself — hemant <gethemant@...>

Hi,

12 messages 2007/09/20

[#12248] arbitrary Unicode characters in identifiers? — David Flanagan <david@...>

12 messages 2007/09/26

[#12284] gc.c -- possible logic error? — Hugh Sasse <hgs@...>

I've been looking at Tom Copeland's memory allocation problem:

36 messages 2007/09/28
[#12329] Re: gc.c -- possible logic error? — Tanaka Akira <akr@...> 2007/10/01

In article <Pine.GSO.4.64.0709281302390.26570@brains.eng.cse.dmu.ac.uk>,

[#12305] Will 1.8.6 remain compiled with VC6? — "Luis Lavena" <luislavena@...>

Hello Core developers.

29 messages 2007/09/30
[#12306] Re: Will 1.8.6 remain compiled with VC6? — "Austin Ziegler" <halostatue@...> 2007/09/30

On 9/30/07, Luis Lavena <luislavena@gmail.com> wrote:

next method and for loop

From: David Flanagan <david@...>
Date: 2007-09-26 00:38:00 UTC
List: ruby-core #12244
With the introduction of external iterators and the python-like next 
method and StopIteration exception, I'm wondering if there is any 
thought of somehow enabling the for/in loop to work with objects that 
implement next but do not implement each.

As it stands now there is an asymmetry between internal and external 
iterators.  If I implement a class with an each method for internal 
iteration, I can use to_enum to get an Enumerator object that has a next 
method for external iteration.  But if I implement a class that natively 
uses external iteration and implements next, there is no automatic way 
to get an internal iterator for the class.  I can't use for/in on 
instances of my class.  I don't have a to_enumerable method I can call 
on an instance.  And there is no module I can include that will define 
an each method based on my next method.

I'm not sure that this is a problem, but it is an asymmetry that might 
bother programmers migrating from Python, and it might be quite easy to 
address.  I believe, for example that a general-purpose each method can 
be implemented in terms of next as follows:

   def each
     loop do # Note that loop exits cleanly on StopIteration in 1.9
       yield self.next
     end
   end

So what if we had a (built-in) module something like this:

module Iterable   # What's a better name for this? ExternallyEnumerable?
   include Enumerable
   def each
     loop { yield self.next }
   end
end

Then classes that wanted to be enumerable would have a choice.  They could

a) define each and include Enumerable
b) define next and include Iterable

Am I making any sense here?  This isn't something I'm advocating 
strongly for; but it is an idea I would like to get out there.

A simple demo program follows

	David


module Iterable
   include Enumerable
   def each
     loop { yield self.next }
   end
end

class Countdown
   include Iterable

   def initialize(x)
     @x = x
   end

   def next
     raise StopIteration if @x <= 0
     @x -= 1
   end
end

f = Countdown.new(10)
for i in f
   puts i
end

In This Thread

Prev Next