2016-08-21 1 views
0

danke fürs Klicken. Ich lerne Ruby aus dieser tutorial.Verwendung der Puts-Methode in Ruby, um die gleiche Ausgabe wie beim Drucken in einer Schleife zu erhalten

Und hier ist ein bisschen Code für eine Methode, die quadratische Werte gibt.

def first_square_numbers(number_of_squares) 
squares = [] 

idx = 0 
while idx < number_of_squares 
    squares.push(idx * idx) 
    idx = idx + 1 
end 

return squares 
end 

puts("How many square numbers do you want?") 
number_of_desired_squares = gets.to_i 
squares = first_square_numbers(number_of_desired_squares) 

idx = 0 
while idx < squares.length 
puts(squares[idx]) 
idx = idx + 1 
end 

# Output: 
# How many square numbers do you want? 
# 7 
# 0 
# 1 
# 4 
# 9 
# 16 
# 25 
# 36 

Meine Frage ist, um die Ausgabe, statt dieses Codes zu drucken:

idx = 0 
while idx < squares.length 
    puts(squares[idx]) 
    idx = idx + 1 
end 

Kann ich das nur sagen?

puts(squares) 

Ich habe es versucht und habe das gleiche Ergebnis, aber ich bin mir nicht sicher, was "richtiger" ist und warum.

Danke!

+0

Sie sind also ein guter Student, der Exploration liebt. Ja, 'puts' druckt Arrays ein Element eine Zeile, so dass Ihr Code absolut korrekt ist. Wenn Sie Ruby lernen, werden Sie feststellen, dass alle Schleifen unnötig sind und wir das ganze Skript in nur 3 Zeilen schreiben können. – Aetherus

Antwort

0

Wenn Sie puts mit einem Array aufrufen, werden die Elemente zeilenweise ausgedruckt. Das Verhalten ist genau das gleiche wie Ihre Loop-Version.

Siehe die Dokumente here

Wenn mit einem Array Argument aufgerufen, schreibt jedes Element auf einer neuen Zeile.

P.S. Es ist praktischer Einbau-Iteration Methoden zu verwenden, auf alle Elemente in einem Array zu betreiben:

squares.each do |square| 
    puts(square) 
    # possibly some other operations on the element 
end 
2
puts squares 

ist, ohne Zweifel, mehr korrekt, da es sich um eine idiomatische Ruby. Eine weitere Möglichkeit ist es, die each Iteratormethode zu verwenden:

squares.each { |n| puts n } 

Aber in diesem Fall puts ist genug.

1

Ja sollten Sie puts squares stattdessen verwenden (keine Notwendigkeit, dass die hier entweder Klammern), weil es besser lesbar und sauberer ist und gut, es gibt keine Notwendigkeit, neu zu erfinden das Rad usw.

Obwohl Ihre gesamte Code funktioniert gut, in Rubin wäre es besser, wie etwas zu tun:

puts "How many squares do you want?" 
puts (1..gets.to_i).map {|i| i**2 } 

Wie es funktioniert ...

die Benutzer Angenommen en 7 ters:

1..gets.to_i #creates a range from 1 to the user's input 
    #=> 1..7 

map {|i| i**2 } #takes each element from 1..7, squares it and puts in an array 
    #=> [1, 4, 9, 16, 25, 36, 49] 

puts #prints out each element of the above array on a new line: 
    #=> 
    #1 
    #4 
    #9 
    #16 
    #25 
    #36 
    #49 

Für weitere Informationen siehe Dokumentation für Range und Enumerable#map.

Verwandte Themen