Pracuję nad książką, która podaje przykłady konwersji zakresów na równoważne tablice przy użyciu ich metod „to_a”
Kiedy uruchamiam kod w irb, pojawia się następujące ostrzeżenie
warning: default `to_a' will be obsolete
Jaka jest poprawna alternatywa dla używania to_a?
czy istnieją alternatywne sposoby zapełniania tablicy zakresem?
Odpowiedzi:
Możesz utworzyć tablicę z zakresem za pomocą ikony,
przy użyciu
Kernel
Array
metody,lub używając to_a
źródło
order = 1
. Potemorder << (2.25).to_a
. Ale to tworzy kolejną tablicę wewnątrz tablicy, po prostu chcę zakres od 2 do 25. Jednak jeśli spróbujęorder << (2.25)
, otrzymam błąd, nie będę mógł przekonwertować zakresu na liczbę całkowitą.concat
zamiast<<
. Ponadto nie powinieneś otrzymywać komunikatu „nie można przekonwertować zakresu naorder
liczbę całkowitą”, chyba że jest to liczba całkowita - w takim przypadku przesuwałbyś bity, a nie dodawałeś tablicę.(1..10).to_a
dla kompatybilności wstecznej[*1..10]
.Działa to dla mnie w irb:
Zauważam to:
Może brakuje Ci nawiasów?
(Korzystam z poziomu łatki Ruby 1.8.6 114)
źródło
Fixnum.methods.include?(to_a)
z Ruby 1.9.2, zauważysz, że metoda to_a nie jest już zdefiniowana, dlatego otrzymałeś ten komunikat o amortyzacji w 08Fixnum.instance_methods.include?(:to_a)
methods.include?
ma więcej informacji:$ irb
irb(main):001:0> Fixnum.methods.include?(to_a)
(irb):1: warning: default
to_a 'będzie przestarzałe=> false
irb(main):002:0> Fixnum.instance_methods.include?(:to_a)
=> false
to_a
ostrzeżenie w pierwszej formie. To dlatego, że dzwoniszto_a
naself
- nie są faktycznie sprawdzenie, czyto_a
jest to metoda Fixnum. Spróbuj zadzwonićto_a
samodzielnie, a zobaczysz to samo ostrzeżenie.Wygląda na to, że to robisz:
Ostrzeżenie pochodzi od Fixnum # to_a, a nie z Range # to_a. Spróbuj zamiast tego:
źródło
Sprawdź to:
źródło
To jest inny sposób:
źródło
Właśnie próbowałem użyć zakresów od większej do mniejszej i uzyskałem wynik, którego się nie spodziewałem:
Wynika to z implementacji zakresów.
Musiałem więc użyć następującej opcji:
źródło
5.downto(1).to_a
który jest innym sposobem wyrażenia malejącego zakresu stackoverflow.com/a/8927009/703903