Czy istnieje możliwość zwrócenia wielu wartości z metody? Coś takiego:
def someMethod()
return ["a", 10, SomeObject.new]
end
[a, b, c] = someMethod
def sumdiff(x, y)
return x+y, x-y
end
#=> nil
sumdiff(3, 4)
#=> [7, -1]
a = sumdiff(3,4)
#=> [7, -1]
a
#=> [7, -1]
a,b=sumdiff(3,4)
#=> [7, -1]
a
#=> 7
b
#=> -1
a,b,c=sumdiff(3,4)
#=> [7, -1]
a
#=> 7
b
#=> -1
c
#=> nil
>>
zachętą irb zniknie.def foo_and_bar; ['foo', 'bar']; end
Ruby ma ograniczoną formę wiązania destrukturyzującego:
Ma również ograniczoną formę wiązania struktury:
Możesz połączyć te dwie formy w następujący sposób:
Jest kilka innych rzeczy, które możesz zrobić z destrukturyzacją / tworzeniem wiązania. Nie pokazałem, używając operatora splat (
*
) po prawej stronie. Nie pokazałem zagnieżdżenia (używając parafii). Nie pokazałem, że na liście parametrów bloku lub metody można użyć wiązania destrukturyzującego.Oto tylko przystawka:
źródło
Chociaż zwracanie wielu wartości jest często przydatne, zwykle uważam, że jest to wskaźnik do nowego wymagania dotyczącego obiektu.
Oznacza to, że zwykle stwierdzam, że te zwracane wartości są ściśle powiązane ze sobą w znaczeniu / kontekście i jako takie są przekazywane. W takich przypadkach utworzyłbym nowy obiekt, aby powiązać je ze sobą. To szczególny zapach kodu, który nauczyłem się rozpoznawać.
źródło
chunk
Oczywiście nie zawsze tak jest, bo inaczej rzeczy takie jak nie istniałyby. Jednak doskonała zasada. Zapach kodu rzeczywiście. Rock on.Możesz to osiągnąć również zwracając tablicę, na przykład
co wydaje się funkcjonalnie równoważne z
źródło