“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