Ich arbeite an einem Buch, das Beispiele für Bereiche enthält, die mit ihren "to_a" -Methoden in äquivalente Arrays konvertiert werden
Wenn ich den Code in irb ausführe, erhalte ich die folgende Warnung
warning: default `to_a' will be obsolete
Was ist die richtige Alternative zur Verwendung von to_a?
Gibt es alternative Möglichkeiten, ein Array mit einem Bereich zu füllen?
Antworten:
Sie können ein Array mit einem Bereich mit splat erstellen.
mit
Kernel
Array
Methode,oder mit to_a
quelle
order = 1
. Dannorder << (2.25).to_a
. Dies erzeugt jedoch ein anderes Array innerhalb des Arrays. Ich möchte einfach den Bereich von 2 bis 25. Wenn ich jedoch versucheorder << (2.25)
, den Fehler zu erhalten, kann Range nicht in Integer konvertiert werden.concat
statt<<
. Außerdem sollten Sie nicht "kann Range nicht in Integer konvertieren" erhalten, esorder
sei denn, es handelt sich um eine Ganzzahl. In diesem Fall würden Sie Bitverschiebungen vornehmen und keine Arrays anhängen.(1..10).to_a
für die Abwärtskompatibilität[*1..10]
.Das funktioniert bei mir in irb:
Ich bemerke das:
Vielleicht fehlen Ihnen die Klammern?
(Ich verwende Ruby 1.8.6 Patchlevel 114)
quelle
Fixnum.methods.include?(to_a)
in Ruby 1.9.2 laufen, werden Sie feststellen, dass die to_a-Methode nicht mehr definiert ist, weshalb Sie diese Abschreibungsnachricht in 08Fixnum.instance_methods.include?(:to_a)
methods.include?
ist informativer:$ irb
irb(main):001:0> Fixnum.methods.include?(to_a)
(irb):1: warning: default
to_a 'wird veraltet sein=> false
irb(main):002:0> Fixnum.instance_methods.include?(:to_a)
=> false
to_a
Warnung in der ersten Form auslöst . Es ist , weil Sie anrufento_a
aufself
- Sie sind nicht wirklich zu prüfen , obto_a
ein Verfahren der Fixnum ist. Wennto_a
Sie versuchen, selbst anzurufen, wird dieselbe Warnung angezeigt.Klingt so, als ob Sie dies tun:
Die Warnung stammt von Fixnum # to_a, nicht von Range # to_a. Versuchen Sie stattdessen Folgendes:
quelle
Überprüfen Sie dies:
quelle
Dies ist ein anderer Weg:
quelle
Ich habe nur versucht, Bereiche von größerer bis kleinerer Menge zu verwenden und habe das Ergebnis erhalten, das ich nicht erwartet hatte:
Das liegt an Bereichsimplementierungen.
Also musste ich folgende Option verwenden:
quelle
5.downto(1).to_a
was eine andere Möglichkeit ist, einen abnehmenden Bereich auszudrücken. Stackoverflow.com/a/8927009/703903