Ruby String-variable "true" zurückgeben .is_a?(Array)
Habe ich eine Methode, mit der entweder ein array oder ein string
Für die Methode, um korrekt zu arbeiten, muss ich konvertieren, dass die Zeichenfolge in ein array.
Da wird es manchmal Zeichenfolge, wollte ich es überprüfen, ob die variable ein array ist, und wenn Sie nicht konvertieren es in ein array. Also habe ich Folgendes gemacht:
unless variablename.is_a?(Array)
variablename = variablename.lines.to_a
end
In der zweiten Zeile dies fehl und ich bekomme ein ruby-Fehler, die 'Linien' nicht verfügbar ist, um ein array-Objekt.
Ich auch versucht .kind_of? mit dem gleichen Ergebnis
Bekam ich meine Antwort, aber ich wollte auch klar, was genau ich gefragt wurde.
Ich bin getestet, um zu sehen, ob variablename ist ein array. Aus irgendeinem Grund, wenn variablename ist ein array, es läuft immer noch, und als die zweite Zeile der folgende Fehler Auftritt:
undefined method `Linien' für #Array:0x000000021382b8 (NoMethodError)
variablename
um sicherzustellen, dass seine Inhalte und die Art und stellen die eigentliche exception geworfen?String#to_a
ist nicht definiert.Wenn die beiden Antworten sind nicht korrekt, dann müssen Sie verbessern die Frage, denn es ist somit unklar, was Sie brauchen.
Was passiert, wenn Sie einfügen
p variablename.class
Recht nach dem Zustand? Was wird es sagen?Es sei denn, Sie können zeigen Sie uns den code oder Folgen Sie dem wirklich einfachen debugging-Anweisungen, die von sawa, wir sind nicht gonna überall zu bekommen.
InformationsquelleAutor Jon Heckman | 2013-09-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun, es sei denn, dass:
Aber es macht mehr Sinn zu prüfen, ob ein String-Objekt vor dem Aufruf eine String-Methode auf das Objekt über die Prüfung für nicht ein Array.
Heckman, poste ich ein Beispiel mit deinem, es sei denn, Klausel, und vergleichen Sie es mit Ihrem code.
InformationsquelleAutor 7stud
Brauchen Sie nicht
to_a
nachlines
. Es ist immer ein array. Sie können dies tun:Suchen Sie in Ihrer Fehlermeldung mit der Inspektion
#Array:0x000000021382b8
,variablename
ist wohl keineArray
.["foo\nbar"]
aber nicht["foo\n", "bar"]
(vorausgesetzt, dass Ruby 1.9 oder höher), so ist es nicht das, was Jon will.Auch diese Antwort in keiner Weise erklärt, warum Ruby würde sich beschweren, dass
variablename
ist ein Objekt der Klasse Array, wenn der code innerhalb einerunless variablename.is_a?(Array)
block, die, soweit ich das beurteilen kann, war die eigentliche Frage. Natürlich sind die meisten wahrscheinlich, dass, wäre es nicht, und Jon ist entweder falsche Angaben zu seinem code, die Fehlermeldung und/oder Ort des Fehlers an uns.In diesem Fall, bin ich davon ausgegangen, dass der OP wollte
["foo\nbar"]
. Wenn nicht, dann ist die "Frage" ist nicht eindeutig (es gibt Eigentlich keine Frage im OP "Frage").Ich bin damit einverstanden, dass die Frage nicht ganz klar ist, im Allgemeinen, aber seit Jon speziell genannt
lines
, zumindest der Teil über ihn, die ein string (wenn ein string angegeben ist) , Aufteilung in Zeilen, scheint mir klar.Tatsächlich, die Frage war nicht klar, auf alle. Ich habe meine Antwort auf deinen zweiten Kommentar.
InformationsquelleAutor sawa
Eher als die überprüfung der Art (
is_a? String
), würde ich prüfen, ob das Objekt reagiert auf die Methode benötigt für die Konvertierung. Unter der Annahme, dass Sie möchten, Durchlaufen Linien entweder als ein array von Zeilen oder als eine (multi-line) string, so etwas wie dies funktionieren würde:InformationsquelleAutor Stefan