7

次のコードを使用して、1 から 50 までのすべての数字を出力しようとしています。

[1..50].each{|n|   puts n}

しかし、コンソール印刷

 [1..50] 

このようなものを印刷したい 1 2 3 4 ... 50

4

4 に答える 4

16

次のコードを試してください。

(1..50).each { |n| puts n }

問題は、[]デリミタではなくデリミタを使用していることです()

于 2013-01-25T18:58:50.083 に答える
9

[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"

必要な出力を取得するには。

于 2013-01-25T19:11:18.003 に答える
8

ここでのエラーは、唯一の要素として範囲を持つ 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 }
于 2013-01-25T19:06:09.417 に答える
3

範囲 (括弧内) を配列 ([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
于 2013-01-25T19:13:26.087 に答える