Ruby Range打印出额外的

时间:2013-01-03 12:25:34

标签: ruby range

我是新手编码所以请自由指出我引用代码的方式中的任何错误。

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 个答案:

答案 0 :(得分:1)

一个Range上的

each在循环完成后返回范围,并且您可能也打印了返回值test

只需运行test(5)代替puts test(5)或其他内容。

答案 1 :(得分:1)

Ruby总是返回任何函数的最后一行。

您正在执行puts test(5)test(5)打印您期望的数据,额外的puts打印出test(5)方法返回的数据。

希望能回答你的问题。

答案 2 :(得分:1)

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

答案 3 :(得分: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"