2013-07-10 3 views
0

S'il vous plaît voir le code ci-dessous:pourquoi la méthode .downto ne fonctionne pas?

"S".upto("Z") {|word| puts word} 

Il montre un résultat correct.

Mais quand j'ai utilisé la méthode .downto, il n'y a eu aucun résultat.

"Z".downto("S") {|word| puts word} 

POURQUOI?

+0

Raison pour laquelle 'chaîne # downto' ou' chaîne # next' n'existe pas: http://stackoverflow.com/questions/16716522/what -est-le-contraire-de-string-next/16716619 # 16716619 – sawa

Répondre

2

cela ne fonctionne pas car String n'a pas de méthode downto. Il a seulement upto.

+0

OK !! Merci beaucoup. mais toujours confus ~ Pourquoi juste. – Dreams

1

Il n'y a pas de méthode downto sur Strings dans Ruby (même s'il existe une telle méthode pour les nombres). (Vérifiez: http://ruby-doc.org/core-2.0/String.html)

À cela vous pouvez demander, "Pourquoi pas?" Et à cela je n'ai pas de réponse.

+0

Haha ~~ je fais! merci – Dreams

1

il pas de méthode .downto pour un objet String mais vous pouvez faire:

('S'..'Z').to_a.reverse.each {|word| puts word} 

OU

"S".upto("Z").to_a.reverse.each {|word| puts word} 

pour obtenir le résultat que vous attendiez.

1

ell, il y a une bonne raison à cela: il n'y a pas de méthode avec ce nom déclaré pour le String Class! N'oubliez pas de rechercher la documentation des classes/méthodes lorsque vous n'êtes pas sûr.

Mais il existe une solution de contournement, ne vous inquiétez pas, étendez simplement la classe avec votre propre méthode. Mon essai serait:

class String 
    def downto value 
     v = value.upto self 
     v.to_a.reverse.each 
    end 
end 

puts "S".upto("Z").collect {|x| x} 
puts "Z".downto("S").collect {|x| x} 

viderait

Upto : ["S", "T", "U", "V", "W", "X", "Y", "Z"] 
Downto: ["Z", "Y", "X", "W", "V", "U", "T", "S"] 
Questions connexes