PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.ruby > Generator#yield - what does it do?
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Generator#yield - what does it do?

Réponse
 
LinkBack Outils de la discussion
Vieux 02/12/2007, 23h03   #1
Wolfgang Nádasi-Donner
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Generator#yield - what does it do?

Hi!

I am confused somehow with respect to "Generator#yield". The description
(ri) is...

>ri Generator#yield

-------------------------------------------------------- Generator#yield
yield(value)
------------------------------------------------------------------------
Yields an element to the generator.

It's unclear for me what this means. I would expect that the Generator
object delivers (yields) values by requirement through
"Generator#current" or "Generator#next", but what should be yielded to
an already existing Generator object?

Wolfgang Nádasi-Donner
--
Posted via http://www.ruby-forum.com/.

  Réponse avec citation
Vieux 03/12/2007, 02h09   #2
MonkeeSage
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Generator#yield - what does it do?

On Dec 2, 5:03 pm, Wolfgang Nádasi-Donner <ed.oda...@wonado.de> wrote:
> Hi!
>
> I am confused somehow with respect to "Generator#yield". The description
> (ri) is...
>
> >ri Generator#yield

>
> -------------------------------------------------------- Generator#yield
> yield(value)
> ------------------------------------------------------------------------
> Yields an element to the generator.
>
> It's unclear for me what this means. I would expect that the Generator
> object delivers (yields) values by requirement through
> "Generator#current" or "Generator#next", but what should be yielded to
> an already existing Generator object?
>
> Wolfgang Nádasi-Donner
> --
> Posted viahttp://www.ruby-forum.com/.


It's for passing items *into* the generator's queue when the generator
is created with the block form of Generator#new rather than from an
existing enumerable. Example...

require 'generator'
g = Generator.new { | g |
1.upto(9) { | i |
g.yield(i)
}
g.yield(10)
}
until g.end?
p g.next
end

It probably should be spelled "inject" or something.

Regards,
Jordan
  Réponse avec citation
Vieux 03/12/2007, 02h12   #3
MonkeeSage
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Generator#yield - what does it do?

On Dec 2, 8:09 pm, MonkeeSage <MonkeeS...@gmail.com> wrote:
> On Dec 2, 5:03 pm, Wolfgang Nádasi-Donner <ed.oda...@wonado.de> wrote:
>
>
>
> > Hi!

>
> > I am confused somehow with respect to "Generator#yield". The description
> > (ri) is...

>
> > >ri Generator#yield

>
> > -------------------------------------------------------- Generator#yield
> > yield(value)
> > ------------------------------------------------------------------------
> > Yields an element to the generator.

>
> > It's unclear for me what this means. I would expect that the Generator
> > object delivers (yields) values by requirement through
> > "Generator#current" or "Generator#next", but what should be yielded to
> > an already existing Generator object?

>
> > Wolfgang Nádasi-Donner
> > --
> > Posted viahttp://www.ruby-forum.com/.

>
> It's for passing items *into* the generator's queue when the generator
> is created with the block form of Generator#new rather than from an
> existing enumerable. Example...
>
> require 'generator'
> g = Generator.new { | g |
> 1.upto(9) { | i |
> g.yield(i)
> }
> g.yield(10)}
>
> until g.end?
> p g.next
> end
>
> It probably should be spelled "inject" or something.


err... ^^^^^^^^ = "insert"

> Regards,
> Jordan


  Réponse avec citation
Vieux 03/12/2007, 07h13   #4
Wolfgang Nádasi-Donner
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Generator#yield - what does it do?

Jordan Callicoat wrote:
> On Dec 2, 5:03 pm, Wolfgang N�dasi-Donner <ed.oda...@wonado.de> wrote:
>> It's unclear for me what this means. I would expect that the Generator
>> object delivers (yields) values by requirement through
>> "Generator#current" or "Generator#next", but what should be yielded to
>> an already existing Generator object?

> It's for passing items *into* the generator's queue when the generator
> is created with the block form of Generator#new rather than from an
> existing enumerable. Example...


I see - the confusion came from the usual meaning of yield: call a block
and deliver objects to it. Here it is used from a block into a method.

btw. - at least in "PickAxe" the word "yield" it marked as a reserved
word.

Wolfgang Nádasi-Donner
--
Posted via http://www.ruby-forum.com/.

  Réponse avec citation
Vieux 03/12/2007, 07h49   #5
MonkeeSage
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Generator#yield - what does it do?

On Dec 3, 1:13 am, Wolfgang Nádasi-Donner <ed.oda...@wonado.de> wrote:
> Jordan Callicoat wrote:
> > On Dec 2, 5:03 pm, Wolfgang N�dasi-Donner <ed.oda...@wonado.de> wrote:
> >> It's unclear for me what this means. I would expect that the Generator
> >> object delivers (yields) values by requirement through
> >> "Generator#current" or "Generator#next", but what should be yielded to
> >> an already existing Generator object?

> > It's for passing items *into* the generator's queue when the generator
> > is created with the block form of Generator#new rather than from an
> > existing enumerable. Example...

>
> I see - the confusion came from the usual meaning of yield: call a block
> and deliver objects to it. Here it is used from a block into a method.


Yes... it really should be spelled differently. The idea is "send this
item into the generator queue, so that the generator yields it (normal
meaning) on the next iteration"...but it is confusing to have it named
yield.

> btw. - at least in "PickAxe" the word "yield" it marked as a reserved
> word.


Object attributes can share the same name as reserved words since they
live in the namespace of the caller. Example...

class Control
def if(cond, yes, no) # 'if' is a reserved keyword
if instance_eval(cond) then yes else no end
end
end
Control.new.if("5>4", "ok", "broken")
# => "ok"

> Wolfgang Nádasi-Donner
> --
> Posted viahttp://www.ruby-forum.com/.


Regards,
Jordan
  Réponse avec citation
Vieux 03/12/2007, 08h25   #6
Wolfgang Nádasi-Donner
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Generator#yield - what does it do?

David A. Black wrote:
> Reserved words can still be method names (e.g., class). It would be
> nice to have a different word for this method, since it does feel a
> bit backwards in relation to the other "yield", but as I recall there
> have been discussions already and nothing that Matz liked was
> proposed.


I think the documentation of the method should be a little bit extended.
The name of the method is not as bad as it looks like in the first
moment, because it is used in the way to "yield" a value later to the
user of the generator.

After yours and Jordan's explanations everything is clear now. It's
simply the documentation text "Yields an element to the generator",
which leads to the assumption, that the method can be called elsewhere
and delivers some objekt to the existing generator.

Wolfgang Nádasi-Donner
--
Posted via http://www.ruby-forum.com/.

  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 02h11.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,14868 seconds with 14 queries