ไม่จริง Ruby ไม่สนับสนุนการส่งคืนวัตถุสองชิ้น (BTW: คุณส่งคืนอ็อบเจ็กต์ไม่ใช่ตัวแปรแม่นยำยิ่งขึ้นคุณส่งคืนพอยน์เตอร์ไปยังอ็อบเจ็กต์)
อย่างไรก็ตามสนับสนุนการมอบหมายงานคู่ขนาน หากคุณมีวัตถุมากกว่าหนึ่งชิ้นทางด้านขวามือของงานที่มอบหมายวัตถุจะถูกรวบรวมไว้ในArray
:
foo = 1, 2, 3
foo = [1, 2, 3]
หากคุณมี "เป้าหมาย" (วิธีตัวแปรหรือตัวตั้งค่า) มากกว่าหนึ่งรายการทางด้านซ้ายมือของการกำหนดตัวแปรจะถูกผูกไว้กับองค์ประกอบของArray
ทางด้านขวามือ:
a, b, c = ary
a = ary[0]
b = ary[1]
c = ary[2]
ถ้าด้านขวามือไม่ใช่ an ระบบArray
จะแปลงเป็นด้านขวาโดยใช้to_ary
วิธี
a, b, c = not_an_ary
ary = not_an_ary.to_ary
a = ary[0]
b = ary[1]
c = ary[2]
และถ้าเรารวมทั้งสองอย่างเข้าด้วยกันเราจะได้สิ่งนั้น
a, b, c = d, e, f
ary = [d, e, f]
a = ary[0]
b = ary[1]
c = ary[2]
ที่เกี่ยวข้องคือตัวดำเนินการ Splat ทางด้านซ้ายมือของงาน หมายความว่า "นำองค์ประกอบด้านซ้ายทั้งหมดของทางด้านArray
ขวามือ":
a, b, *c = ary
a = ary[0]
b = ary[1]
c = ary.drop(2)
และสุดท้าย แต่ไม่ท้ายสุดการกำหนดแบบขนานสามารถซ้อนกันได้โดยใช้วงเล็บ:
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]
เมื่อคุณreturn
จากวิธีการหรือnext
หรือbreak
จากบล็อก Ruby จะปฏิบัติต่อสิ่งนี้เหมือนทางด้านขวามือของงานดังนั้น
return 1, 2
next 1, 2
break 1, 2
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
SA เดียวสององค์ประกอบArray
ของคีย์และความคุ้มค่าที่จะบล็อก แต่เรามักจะเขียน
some_hash.each {|k, v| }
แทน
some_hash.each {|(k, v)| }