नहीं, रूबी वास्तव में दो वस्तुओं को वापस करने का समर्थन नहीं करती है। (BTW: आप ऑब्जेक्ट्स लौटाते हैं, चर नहीं। अधिक सटीक रूप से, आप ऑब्जेक्ट्स पर पॉइंटर्स लौटाते हैं।)
हालांकि, यह समानांतर असाइनमेंट का समर्थन करता है। यदि आपके पास असाइनमेंट के दाईं ओर एक से अधिक ऑब्जेक्ट हैं, तो ऑब्जेक्ट्स को एक में एकत्रित किया जाता है Array:
foo = 1, 2, 3
# is the same as
foo = [1, 2, 3]
यदि आपके पास एक असाइनमेंट के बाईं ओर एक से अधिक "लक्ष्य" (वैरिएबल या सेटर विधि) है, तो वेरिएबल्स Arrayदाईं ओर के तत्वों से बंधे होते हैं :
a, b, c = ary
# is the same as
a = ary[0]
b = ary[1]
c = ary[2]
यदि दाहिने हाथ की तरफ एक नहीं है Array, तो इसे to_aryविधि का उपयोग करके एक में परिवर्तित किया जाएगा
a, b, c = not_an_ary
# is the same as
ary = not_an_ary.to_ary
a = ary[0]
b = ary[1]
c = ary[2]
और अगर हम दोनों को एक साथ रखते हैं, तो हमें वह मिल जाता है
a, b, c = d, e, f
# is the same as
ary = [d, e, f]
a = ary[0]
b = ary[1]
c = ary[2]
इससे संबंधित असाइनमेंट के बाईं ओर स्थित स्पैट ऑपरेटर है। इसका मतलब है " दाहिने हाथ की ओर के सभी बाएं-ओवर तत्वों को लें Array":
a, b, *c = ary
# is the same as
a = ary[0]
b = ary[1]
c = ary.drop(2) # i.e. the rest of the Array
और अंतिम लेकिन कम से कम नहीं, समानांतर असाइनमेंट को कोष्ठक का उपयोग करके घोंसला बनाया जा सकता है:
a, (b, c), d = ary
# is the same as
a = ary[0]
b, c = ary[1]
d = ary[2]
# which is the same as
a = ary[0]
b = ary[1][0]
c = ary[1][1]
d = ary[2]
जब आप returnकिसी विधि से nextया breakकिसी ब्लॉक से आते हैं, तो रूबी इस तरह का व्यवहार करेगी जैसे कि किसी असाइनमेंट के राइट-हैंड साइड,
return 1, 2
next 1, 2
break 1, 2
# is the same as
return [1, 2]
next [1, 2]
break [1, 2]
वैसे, यह विधियों और ब्लॉकों की पैरामीटर सूचियों में भी काम करता है (तरीकों के अधिक सख्त होने और कम सख्त ब्लॉक करने के लिए):
def foo(a, (b, c), d) p a, b, c, d end
bar {|a, (b, c), d| p a, b, c, d }
ब्लॉक "कम सख्त" उदाहरण के लिए है जो Hash#eachकाम करता है। यह वास्तव में ब्लॉक के लिए कुंजी और मूल्य का yieldएक एकल -तत्व Arrayहै, लेकिन हम आमतौर पर लिखते हैं
some_hash.each {|k, v| }
के बजाय
some_hash.each {|(k, v)| }