我是新手编码所以请自由指出我引用代码的方式中的任何错误。
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
会出现?我该如何摆脱它?
我在方法中需要它,因为我计划为它添加更多代码。
答案 0 :(得分:1)
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"