我正在尝试使用以下代码打印 1 到 50 之间的所有数字:
[1..50].each{|n| puts n}
但控制台打印
[1..50]
我想打印这样的东西 1 2 3 4 ... 50
我正在尝试使用以下代码打印 1 到 50 之间的所有数字:
[1..50].each{|n| puts n}
但控制台打印
[1..50]
我想打印这样的东西 1 2 3 4 ... 50
试试下面的代码:
(1..50).each { |n| puts n }
问题是您使用的是[]
分隔符而不是分隔符()
。
您可以[1..10]
稍作调整使用:
[*1..10].each{ |i| p i }
输出:
1 2 3 4 5 6 7 8 9 10
( *
AKA "splat") 将范围“分解”为其组件,然后用于填充数组。它类似于写作(1..10).to_a
。
你也可以这样做:
puts [*1..10]
打印同样的东西。
所以,试试:
[*1..10].join(' ') # => "1 2 3 4 5 6 7 8 9 10"
或者:
[*1..10] * ' ' # => "1 2 3 4 5 6 7 8 9 10"
得到你想要的输出。
这里的错误是您正在创建一个以范围作为唯一元素的 Array 对象。
> [1..10].size
=> 1
如果要each
在范围上调用方法,则必须将范围括在括号中,以避免在范围的最后一个元素而不是范围本身上调用该方法。
=> (1..10).each { |i| print i }
12345678910
其他实现相同目的的方法:
(1..50).each { |n| print n }
1.up_to(50) { |n| print n }
50.times { |n| print n }
您可以将您的范围(在括号中)转换为一个数组([1 2 3 4 5 6...48 49 50])并加入每个项目(例如,' '
如果您希望所有项目都在一行中)。
puts (1..50).to_a.join(' ')
# => 1 2 3 4 5 6 7 ... 48 49 50