Estou trabalhando em um livro que fornece exemplos de intervalos sendo convertidos em matrizes equivalentes usando seus métodos "to_a"
Quando executo o código no irb, recebo o seguinte aviso
warning: default `to_a' will be obsolete
Qual é a alternativa correta para usar to_a?
existem maneiras alternativas de preencher uma matriz com um intervalo?
Respostas:
Você pode criar uma matriz com um intervalo usando splat,
usando o
Kernel
Array
métodoou usando to_a
fonte
order = 1
. Entãoorder << (2.25).to_a
. Mas isso cria outra matriz dentro da matriz, eu simplesmente quero o intervalo de 2 a 25. No entanto, se eu tentar,order << (2.25)
eu recebo o erro não pode converter Range em Inteiro.concat
vez de<<
. Além disso, você não deve obter "não é possível converter o intervalo em número inteiro", a menos queorder
seja um número inteiro - nesse caso, você trocaria os bits, não acrescentaria o array.(1..10).to_a
para compatibilidade com versões anteriores[*1..10]
.Isso funciona para mim no irb:
Eu reparei nisso:
Então, talvez você esteja perdendo os parênteses?
(Estou executando o Ruby 1.8.6 patchlevel 114)
fonte
Fixnum.methods.include?(to_a)
ruby 1.9.2, notará que o método to_a não está mais definido, portanto, por que você estava recebendo essa mensagem de depreciação em 08Fixnum.instance_methods.include?(:to_a)
methods.include?
é mais informativa:$ irb
irb(main):001:0> Fixnum.methods.include?(to_a)
(irb):1: warning: default
to_a' será obsoleto=> false
irb(main):002:0> Fixnum.instance_methods.include?(:to_a)
=> false
to_a
aviso na primeira forma. É porque você está chamandoto_a
deself
- você não está realmente verificando seto_a
é um método de Fixnum. Tente ligarto_a
sozinho e você verá o mesmo aviso.Parece que você está fazendo isso:
O aviso é do Fixnum # to_a, não do intervalo # to_a. Tente isso:
fonte
Verifique isto:
fonte
Esta é outra maneira:
fonte
Eu apenas tentei usar faixas de maior a menor quantidade e obtive o resultado que eu não esperava:
Isso é devido às implementações de intervalos.
Então eu tive que usar a seguinte opção:
fonte
5.downto(1).to_a
que é outra maneira de expressar uma diminuição da gama stackoverflow.com/a/8927009/703903