2012-03-31 3 views
0

Oft möchte ich der Form von Argumenten Flexibilität geben und entweder ein einzelnes Array-Argument oder mehrere Argumente erwarten, die zusammen als einzelnes Array behandelt werden. Die folgenden zwei Verwendungen führen zu demselben Ergebnis.Mehrere Argumente oder ein einzelnes Array-Argument zulassen

foo([arg1, arg2, ...]) 
foo(arg1, arg2, ...) 

Was ist der beste Weg, um solche Verfahren zu implementieren?

+1

Wie würde der Benutzer einen einzelnen Parameter übergeben, der dann ein Array ist? –

+0

@ MladenJablanović Implizit hatte ich im Hinterkopf, dass keine trivialen Argumente, d. H. Die einem Array mit der Länge eins entsprechen, übergeben werden. Aber das ist vielleicht keine nette Idee, wie ich dachte. – sawa

Antwort

2

Wie wäre es damit:

def foo(*bar) 
    bar.flatten! 
    p bar #or whatever 
end 

Dadurch wird sichergestellt, dass egal, was eingegeben wird, Sie daraus eine einzige flache Anordnung erhalten.

+0

Dies hat ein kleines Problem, wenn jedes Element selbst ein Array ist. – sawa

+0

Welches Problem wäre das? Möchten Sie etwas anderes als ein einzelnes Array als Ausgabe? Weil du nach einem einzelnen Array gefragt hast. –

+0

Nein, ich sage das, wenn 'bar' ursprünglich' [[arg1], [arg2], [arg3], ...] 'ist, wird es in' [arg1, arg2, arg3, ...] umgewandelt. '. – sawa