2016-08-21 4 views
0

をクリックしていただきありがとうございます。私はこのtutorialからRubyを学んでいます。ループでの印刷と同じ出力を得るためにRubyにputsメソッドを使用すると、

ここでは、正方形の値を与えるメソッドのコードです。私の質問は、代わりにこのコードで、出力を印刷するために

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 

さ:

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

私はちょうどこれを置くことができますか?

私はそれを試しても同じ結果が得られましたが、どちらが「より正しい」理由がわかりません。

ありがとうございます!

+0

あなたは探検を愛する良い学生です。はい、 'puts'は配列の1つの要素を1行に出力するので、コードは完全に正しいものです。 Rubyを学ぶと、すべてのループが不要で、スクリプト全体をわずか3行で書くことができます。 – Aetherus

答えて

0

putsを配列で呼び出すと、要素を1行ずつ出力します。振る舞いはループバージョンとまったく同じです。配列の引数で呼び出された場合

が文書here

を参照してください、新しい行に各要素を書き込みます。

P.S.これは、アレイ内のすべての要素を操作するために、組み込みの反復法を使用することがより実用的です:それは慣用的なRubyのだから

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

は、疑問なしで、より正確です。別のオプションは、each iteratorメソッドを使用することです:

squares.each { |n| puts n } 

をしかし、この場合にはputsは十分です。それは、より読みやすく、きれいだとも、車輪を再発明する必要はありませんので

1

はい、あなたは(ここでどちらかの括弧は必要ありません)puts squaresを代わりに使用してはならないなど

あなたの全体的なコードがで、正常に動作しますが、

は、ユーザー専用のものと...

どのように動作する
puts "How many squares do you want?" 
puts (1..gets.to_i).map {|i| i**2 } 

:Rubyのそれのような何かをする方が良いだろうTERS 7

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 

詳細についてはRangeEnumerable#mapのマニュアルを参照してください。

関連する問題