Was ist der richtige Weg zu:
is_array("something") # => false (or 1)
is_array(["something", "else"]) # => true (or > 1)
oder um die Anzahl der darin enthaltenen Elemente zu ermitteln?
Was ist der richtige Weg zu:
is_array("something") # => false (or 1)
is_array(["something", "else"]) # => true (or > 1)
oder um die Anzahl der darin enthaltenen Elemente zu ermitteln?
Sind Sie sicher, dass es braucht ein Array zu sein? Vielleicht können Sie Folgendes verwenden respond_to?(method)
so dass Ihr Code würde für ähnliche Dinge, die nicht unbedingt Arrays (vielleicht einige andere enumberable Sache) funktionieren. Wenn Sie tatsächlich eine array
dann den Beitrag mit der Beschreibung der Array#kind\_of?
Methode ist am besten.
['hello'].respond_to?('each')
Statt einer Prüfung auf eine Array,
wandeln Sie einfach alles, was Sie bekommen, in eine einstufige Array,
Ihr Code muss also nur diesen einen Fall behandeln.
t = [*something] # or...
t = Array(something) # or...
def f *x
...
end
Ruby hat verschiedene Möglichkeiten, eine API zu harmonisieren, die ein Objekt oder ein Array von Objekten nehmen kann, so dass, eine Vermutung, warum Sie wissen wollen, ob etwas ist ein Array, habe ich einen Vorschlag.
El splat Operator enthält eine Menge Magie können Sie nachschlagen, oder Sie können einfach aufrufen Array(something)
die bei Bedarf einen Array-Wrapper hinzufügt. Es ist ähnlich wie bei [*something]
in diesem einen Fall.
def f x
p Array(x).inspect
p [*x].inspect
end
f 1 # => "[1]"
f [1] # => "[1]"
f [1,2] # => "[1, 2]"
Oder Sie können die Funktion splat in der Parameterdeklaration und dann .flatten
Damit haben Sie eine andere Art von Sammler. (Im Übrigen könnten Sie .flatten
auch oben).
def f *x
p x.flatten.inspect
end # => nil
f 1 # => "[1]"
f 1,2 # => "[1, 2]"
f [1] # => "[1]"
f [1,2] # => "[1, 2]"
f [1,2],3,4 # => "[1, 2, 3, 4]"
Und, danke gregschlom ist es manchmal schneller, einfach die Funktion Array(x)
denn wenn es bereits ein Array
braucht es kein neues Objekt zu erstellen.
Es klingt, als ob Sie etwas suchen, das ein Konzept von Gegenständen hat. Ich würde daher empfehlen, zu prüfen, ob es sich um Enumerable
. Das garantiert auch die Existenz von #count
.
Zum Beispiel,
[1,2,3].is_a? Enumerable
[1,2,3].count
beachten Sie, dass, während size
, length
y count
funktionieren alle für Arrays, count
ist hier die richtige Bedeutung - (zum Beispiel, 'abc'.length
y 'abc'.size
beide funktionieren, aber 'abc'.count
funktioniert so nicht).
Vorsicht: eine Zeichenkette is_a? Enumerable, so vielleicht ist dies nicht, was Sie wollen... hängt von Ihrem Konzept eines Arrays wie Objekt.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.