1

私はコーディングが初めてなので、コードを参照する方法のエラーを自由に指摘してください。

rows = 5
 (1..rows).each do |n|
  print n, ' '
end

これは、私が期待するものを出力します: 1 2 3 4 5.

しかし、それをメソッドに入れると:

def test(rows)
  (1..rows).each do |n|
   print n, ' '
 end
end

puts test(5)

私は得る1 2 3 4 5 1..5

なぜ1..5表示されるのですか?どうすればそれを取り除くことができますか?

さらにコードを追加する予定なので、メソッドで必要です。

4

4 に答える 4

1

最後1..5はスクリプトからの戻り値です。IRB でコードを実行すると、それが得られます。それをスタンドアロンの Ruby スクリプトとして実行すると、表示されないため、心配する必要はありません。

于 2013-01-03T13:32:36.703 に答える
1

eachon a Range は、ループが完了した後に範囲を返します。おそらく戻り値testも出力しています。

または何かtest(5)の代わりに実行するだけです。puts test(5)

于 2013-01-03T12:27:08.360 に答える
1

Ruby は常に関数の最後の行を返します。

を実行puts test(5)してtest(5)いて、期待するデータをputs出力し、エクストラはメソッドによって返されたデータを出力しますtest(5)

それがあなたの質問に答えることを願っています。

于 2013-01-03T12:31:22.623 に答える
0

あなたのケースでは、Ruby関数は最後のステートメントを返します1..5。説明するために、別の戻り値を与えます。

def test(rows)
  (1..rows).each {|n| puts "#{ n } "}
  return 'mashbash'
end

# Just the function invokation, only the function will print something
test(5) # => "1 2 3 4 5 "

# Same as above, plus printing the return value of test(5)
puts test(5) # => "1 2 3 4 5 mashbash"

あなたが好きなものを達成するために、あなたの例を少し違った方法で書くことができます:

def second_test(rows)
  # Cast range to an array
  array = (1..rows).to_a # [1, 2, 3, 4, 5]
  array.join(', ') # "1, 2, 3, 4, 5", and it is the last statement => return value
end

# Print the return value ("1, 2, 3, 4, 5") from the second_test function
p second_test(5) 
# => "1, 2, 3, 4, 5"
于 2013-01-03T12:45:05.690 に答える