[ruby] Ruby에서 범위로 배열을 채우는 올바른 방법

“to_a”메소드를 사용하여 Ranges를 동등한 배열로 변환하는 예제를 제공하는 책을 연구 중입니다.

irb에서 코드를 실행하면 다음 경고가 표시됩니다.

 warning: default `to_a' will be obsolete

to_a를 사용하는 올바른 대안은 무엇입니까?

배열을 Range로 채우는 다른 방법이 있습니까?



답변

splat을 사용하여 범위가있는 배열을 만들 수 있습니다.

>> a=*(1..10)
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Kernel Array방법을 사용하여

Array (1..10)
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

또는 to_a를 사용하여

(1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


답변

이것은 irb에서 나를 위해 작동합니다.

irb> (1..4).to_a
=> [1, 2, 3, 4]

나는 알아 차렸다 :

irb> 1..4.to_a
(irb):1: warning: default `to_a' will be obsolete
ArgumentError: bad value for range
        from (irb):1

아마도 괄호가 빠져 있습니까?

(나는 Ruby 1.8.6 patchlevel 114를 사용하고있다)


답변

이렇게하는 것처럼 들립니다.

0..10.to_a

경고는 Range # to_a가 아닌 Fixnum # to_a에서 발생합니다. 대신 이것을 시도하십시오 :

(0..10).to_a


답변

이것을 확인하십시오 :

a = [*(1..10), :top, *10.downto( 1 )]


답변

이것은 다른 방법입니다.

irb> [*1..10]

=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


답변

방금 더 큰 양에서 작은 양으로 범위를 사용하려고 시도했지만 예상하지 못한 결과를 얻었습니다.

irb(main):007:0> Array(1..5)
=> [1, 2, 3, 4, 5]
irb(main):008:0> Array(5..1)
=> []

그것은 범위 구현 때문입니다.
따라서 다음 옵션을 사용해야했습니다.

(1..5).to_a.reverse


답변