次のコードを使用して、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]) にキャストし、各項目を結合できます (たとえば、' '
すべての項目を 1 行にまとめたい場合)。
puts (1..50).to_a.join(' ')
# => 1 2 3 4 5 6 7 ... 48 49 50