Saya sedang mengerjakan buku yang memberikan contoh Ranges yang dikonversi ke array yang setara menggunakan metode "to_a" mereka
Ketika saya menjalankan kode di irb saya mendapatkan peringatan berikut
warning: default `to_a' will be obsolete
Apa alternatif yang tepat untuk menggunakan to_a?
Adakah cara alternatif untuk mengisi array dengan Range?
Jawaban:
Anda dapat membuat array dengan rentang menggunakan percikan,
menggunakan
Kernel
Array
metode,atau menggunakan to_a
sumber
order = 1
. Laluorder << (2.25).to_a
. Tapi ini menciptakan array lain di dalam array, saya hanya ingin rentang dari 2 hingga 25. Namun jika saya cobaorder << (2.25)
saya mendapatkan kesalahan tidak dapat mengubah Range menjadi Integer.concat
sebagai gantinya<<
. Selain itu, Anda seharusnya tidak mendapatkan "tidak dapat mengubah Rentang ke Integer" kecualiorder
bilangan bulat - dalam hal ini Anda akan menggeser bit, bukan menambahkan array.(1..10).to_a
untuk kompatibilitas mundur[*1..10]
.Ini bekerja untuk saya di irb:
Saya melihat itu:
Jadi mungkin Anda kehilangan tanda kurung?
(Saya menjalankan Ruby 1.8.6 patchlevel 114)
sumber
Fixnum.methods.include?(to_a)
di ruby 1.9.2 Anda akan melihat bahwa metode to_a tidak lagi didefinisikan, maka mengapa Anda mendapatkan pesan penyusutan di 08Fixnum.instance_methods.include?(:to_a)
methods.include?
lebih informatif:$ irb
irb(main):001:0> Fixnum.methods.include?(to_a)
(irb):1: warning: default
to_a 'akan usang=> false
irb(main):002:0> Fixnum.instance_methods.include?(:to_a)
=> false
to_a
peringatan di formulir pertama. Itu karena Anda meneleponto_a
padaself
- Anda tidak benar-benar memeriksa apakahto_a
adalah metode Fixnum. Coba panggilto_a
dengan sendirinya dan Anda akan melihat peringatan yang sama.Sepertinya Anda melakukan ini:
Peringatan ini dari Fixnum # to_a, bukan dari Range # to_a. Coba ini sebagai gantinya:
sumber
Periksa ini:
sumber
Ini adalah cara lain:
sumber
Saya hanya mencoba menggunakan rentang dari jumlah yang lebih besar ke yang lebih kecil dan mendapatkan hasil yang tidak saya harapkan:
Itu karena implementasi rentang.
Jadi saya harus menggunakan opsi berikut:
sumber
5.downto(1).to_a
yang merupakan cara lain untuk mengekspresikan jangkauan stackoverflow.com/a/8927009/703903 yang