Hayır, Ruby aslında iki nesnenin döndürülmesini desteklemiyor. (BTW: değişkenleri değil, nesneleri döndürürsünüz. Daha doğrusu, nesnelere işaretçileri döndürürsünüz.)
Bununla birlikte, paralel atamayı destekler. Bir ödevin sağ tarafında birden fazla nesneniz varsa, nesneler şu şekilde toplanır Array:
foo = 1, 2, 3
foo = [1, 2, 3]
Bir atamanın sol tarafında birden fazla "hedef" (değişken veya ayarlayıcı yöntemi) varsa, değişkenler Arraysağ taraftaki bir öğesinin öğelerine bağlanır :
a, b, c = ary
a = ary[0]
b = ary[1]
c = ary[2]
Sağ taraftaki ise değil bir Array, bu kullanarak birine dönüştürülür to_aryyöntemi
a, b, c = not_an_ary
ary = not_an_ary.to_ary
a = ary[0]
b = ary[1]
c = ary[2]
Ve ikisini bir araya getirirsek, bunu elde ederiz
a, b, c = d, e, f
ary = [d, e, f]
a = ary[0]
b = ary[1]
c = ary[2]
Bununla ilgili, bir atamanın sol tarafındaki uyarma operatörüdür. " Sağ taraftaki tüm sol taraftaki öğeleri al" anlamına gelir Array:
a, b, *c = ary
a = ary[0]
b = ary[1]
c = ary.drop(2)
Ve son olarak, paralel atamalar parantezler kullanılarak iç içe yerleştirilebilir:
a, (b, c), d = ary
a = ary[0]
b, c = ary[1]
d = ary[2]
a = ary[0]
b = ary[1][0]
c = ary[1][1]
d = ary[2]
Ne zaman seni returnbir yöntem ya gelen nextya breakbir blok, Yakut böylece bir atamanın sağ tarafında gibi bu-tür tedavi edecek
return 1, 2
next 1, 2
break 1, 2
return [1, 2]
next [1, 2]
break [1, 2]
Bu arada, bu aynı zamanda yöntemlerin ve blokların parametre listelerinde de çalışır (yöntemler daha katıdır ve daha az katı engeller):
def foo(a, (b, c), d) p a, b, c, d end
bar {|a, (b, c), d| p a, b, c, d }
Örneğin, blokların "daha az katı" olması Hash#eachişe yarayan şeydir . Aslında yieldsa tek iki eleman Arraybloğuna anahtar ve değer, ama genellikle yazma
some_hash.each {|k, v| }
onun yerine
some_hash.each {|(k, v)| }