Gibt es eine Möglichkeit, mehrere Werte aus der Methode zurückzugeben? Etwas wie dies:
def someMethod()
return ["a", 10, SomeObject.new]
end
[a, b, c] = someMethod
Gibt es eine Möglichkeit, mehrere Werte aus der Methode zurückzugeben? Etwas wie dies:
def someMethod()
return ["a", 10, SomeObject.new]
end
[a, b, c] = someMethod
Sie sollten eine Code-Formatierung verwenden, keine Textformatierung. Richten Sie die Zeilen um vier Leerzeichen ein, und die von irb verursachten Ungereimtheiten >>
Aufforderung verschwindet.
Ruby hat eine begrenzte Form der Destrukturierung von bind:
ary = [1, 2, 3, 4]
a, b, c = ary
p a # => 1
p b # => 2
p c # => 3
a, b, *c = ary
p c # => [3, 4]
a, b, c, d, e = ary
p d # => 4
p e # => nil
Sie hat auch eine begrenzte Form der Strukturierungsbindung:
a = 1, 2, 3
p a # => [1, 2, 3]
Sie können diese beiden Formulare folgendermaßen kombinieren:
a, b = b, a # Nice way to swap two variables
a, b = 1, 2, 3
p b # => 2
def foo; return 1, 2 end
a, b = foo
p a # => 1
p b # => 2
Es gibt noch einige andere Dinge, die Sie mit der Destrukturierung/Strukturierung der Bindung tun können. Ich habe nicht gezeigt, wie man den Splat-Operator ( *
) auf der rechten Seite. Ich habe die Verschachtelung (mit Paranthesen) nicht gezeigt. Ich habe nicht gezeigt, dass Sie die Destrukturierungsbindung in der Parameterliste eines Blocks oder einer Methode verwenden können.
Das ist nur ein kleiner Vorgeschmack:
def foo(((a, b, c, d), e, *f), g, *h)
local_variables.sort.each do |lvar| puts "#{lvar} => #{eval(lvar).inspect}" end
end
foo([[1, 2, 3], 4, 5, 6], 7, 8, 9)
# a => 1
# b => 2
# c => 3
# d => nil
# e => 4
# f => [5, 6]
# g => 7
# h => [8, 9]
Während die Rückgabe mehrerer Werte oft nützlich ist, finde ich es in der Regel ein Zeiger auf ein neues Objekt Anforderung.
Das heißt, ich stelle in der Regel fest, dass diese Rückgabewerte in ihrer Bedeutung/ihrem Kontext eng miteinander verbunden sind und als solche weitergegeben werden. In diesen Fällen würde ich also ein neues Objekt erstellen, um diese miteinander zu verbinden. Das ist ein besonderer Codegeruch, den ich zu erkennen gelernt habe.
Mehr Freiheit, mehr Verantwortung. Erfahrene Rubyisten würden dies ausnutzen und einige schöne Codes schreiben, während Ruby-Neulinge alles schlechter machen können.
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.