2010-08-05 17 views
2

J'ai quelques méthodes pour une classe qui renvoie des tableaux comme ["1", "3", "2", "6", "2"]. C'est ok que ce sont des tableaux de chaînes, pas numériques. J'ai une autre méthode qui prend un tableau, et le transforme en une seule chaîne comme celle-ci 1 3 2 6 2.Méthodes de chaînage Ruby et retour de tableau

class Turn 
    def initialize 
    @rolls = 1 
    @dice = [] 
    end 

    def roll 
    @roll = [] 
    x = 5 - @dice.length 
    x.times do |i| 
     @roll[i] = rand(6) + 1 
    end 
    @roll # ["1", "3", "2", "6", "2"] 
    end 

    def show 
    @dice # ["1", "3", "6"] 
    end 

    def line(something) 
    temp = "" 
    something.each do |x| 
     temp << x + " " 
    end 
    puts temp # "1 3 6 " or "1 3 2 6 2 " 
    end 
end 

Ensuite, je veux être en mesure de méthodes de chaîner pour que je puisse faire

first = Turn.new 
first.roll.line 
first.show.line 

Cependant, je ne sais vraiment pas comment faire, et je n'ai pas pu trouver comment en ligne. J'ai vu self être retourné, mais je ne peux pas vraiment comprendre ce qu'il fait. Le code de la méthode line fonctionne si je le déplace dans une autre méthode, donc le problème concerne uniquement le chaînage et le retour.

Si quelqu'un pouvait non seulement aider avec le code, mais avec la façon dont fonctionne le chaînage en ce qui concerne le retour des valeurs et le retour de soi, ce serait génial.

Merci!

Répondre

2

Depuis votre #roll et #show méthodes renvoient un tableau, vous aurez besoin de définir une méthode Array#line pour être réellement capable de faire first.roll.line.

Btw, il y a déjà Array#join qui joint également des éléments de tableau ensemble à une chaîne, tout comme votre méthode #line, donc vous pouvez également utiliser first.roll.join(' ') et vous débarrasser de votre méthode #line.

+0

Votre deuxième partie est parfaite! Merci d'avoir expliqué la première partie aussi. Alors que je lis de gauche à droite, chaque méthode renvoie une valeur, qui est agi par la méthode suivante? –

+0

oui, chaque méthode retournera le dernier argument. un excellent moyen de voir ceci est d'utiliser la console irb. –

+0

@Jed Faites-vous référence au fait que le dernier argument d'une méthode est retourné, vous n'avez donc pas besoin d'avoir explicitement 'return @ dice'? Parce que je le comprends déjà. Je me demande quand vous avez plusieurs méthodes enchaînées, comment elles transmettent les valeurs retournées. –