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

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 回答
1

最后1..5是脚本的返回值。当你在 IRB 中运行代码时,你会得到它。当您将其作为独立的 Ruby 脚本运行时,它不会显示出来,因此您无需担心。

于 2013-01-03T13:32:36.703 回答
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 回答