2010-04-14 5 views
2

Si vous avez vu mes questions précédentes, vous savez déjà que je suis un gros nuby quand il s'agit de Ruby. J'ai donc découvert ce site qui est destiné à la programmation en C, mais je pensais que tout ce que l'on pouvait faire en C, devait être possible en Ruby (et plus lisible aussi).Ruby: compteurs, comptage et incrémentation

Le défi consiste à imprimer un tas de chiffres. J'ai découvert cette méthode astucieuse .upto() et j'ai utilisé un bloc (et en fait comprendre son but). Cependant, dans IRb, j'ai un comportement inattendu.

class MyCounter 
    def run 
    1.upto(10) { |x| print x.to_s + " " } 
    end 
end 


irb(main):033:0> q = MyCounter.new 
=> #<MyCounter:0x5dca0> 
irb(main):034:0> q.run 
1 2 3 4 5 6 7 8 9 10 => 1 

Je n'ai aucune idée d'où le => 1 vient: S Devrais-je faire autrement? Je m'attends à avoir ce résultat:

1 2 3 4 5 6 7 8 9 10 

Merci pour vos réponses, vos commentaires et vos commentaires!

+0

Pourquoi essayez-vous pas un site qui est destiné à Ruby? – OscarRyz

+2

Pourquoi Oscar Reyes n'arrête-t-il pas de poster? –

+0

Ce site est assez bon et je peux lire le code C tant qu'il n'est pas assez fou. En plus, ça avait l'air plutôt rétro. – Shyam

Répondre

2

Je ne sais pas où => 1 provient de

Ne vous inquiétez pas. Par défaut, irb affiche la valeur renvoyée de l'exécution de la méthode.

Même si vous n'écrivez pas l'instruction return (comme dans C par exemple), Ruby renvoie la valeur de la dernière instruction calculée.

Dans ce cas, il était 1

C'est tout.

Par exemple essayer:

class WhereIsTheReturn 
    def uh? 
     14 * 3 # no return keyword 
    end 
end 


whereIsIt = WhereIsTheReturn.new 
hereItIs = whereIsIt.uh? 
print "Here it is : #{hereItIs}\n" 
3

Le "=> 1" provient de l'IRB, pas votre code. Après chaque instruction que vous tapez dans IRB, il imprime le résultat de cette instruction après une invite "=>".

Essayez d'imprimer une nouvelle ligne dans votre fonction:

def run 
    1.upto(10) { |x| print x.to_s + " " } 
    print "\n" 
end 

Alors ça va ressembler à ceci:

irb> q.run 
1 2 3 4 5 6 7 8 9 10 
    => nil 
+0

Merci beaucoup! – Shyam

+0

@jeremy: Il imprime en fait '=> nil' qui est le résultat de l'exécution:' print "\ n" 'J'ai testé votre réponse pour refléter cela. – OscarRyz

+0

vous êtes les bienvenus @Shyam, et merci @Oscar ... évidemment, je ne l'ai pas testé: P –