Quelqu'un pourrait-il peut-être m'aider à comprendre la différence entre "céder Self" et "rendement"?
class YieldFirstLast attr_accessor :first, :last def initialize(first = nil, last = nil) @first = first @last = last yield self if block_given? end def hello puts "#{@first} #{@last} says hello!" end end
3 Réponses :
Cellation auto code> entre le bloc, associé à l'appel de la méthode, le passage de l'objet actuel en tant qu'argument sur le bloc, le simple
le rendement code> passe simplement dans le bloc sans passer des arguments sans faire passer des arguments. P >
Dans le cas de Cellation auto code>,
auto code> est l'argument transmis au bloc. Avec simplement
rendement code>, aucun argument n'est passé.
auto code> n'est pas spécial ici, tout pourrait être cédé, par exemple
Et s'il y a plus d'un argument transmis au bloc? Est-ce que vous êtes un tableau d'entre eux?
Self Code> est une référence à l'instance, mais comme je l'ai dit, rien de spécial ici. Pensez essentiellement que le rendement est une méthode qui prend des arguments et les transmet au bloc. Voir la modification pour plusieurs arguments.
Merci pour cette explication. Permettez-moi de vérifier ma compréhension, alors lorsque nous utilisons soi-même, X est attribué en tant que référence d'objets actuels. Mais si nous n'utilisons pas soi-même, X n'est attribué à aucun objet.
Oui, il peut être utile de penser que le bloc comme méthode et rendement code> comme invocation de cette méthode. Le bloc
{| x, y | x + y} code> est analogue à
def fn (x, y) x + y extrémiser code>. Si vous avez appelé
fn code> sans argument,
fn () code>, vous vous attendez à
x code> non défini dans le corps de la méthode, oui?
penser au rendement code> comme appelez votre bloc et votre
Self code> invoque votre bloc avec l'instance actuelle comme paramètre. P>