メソッドではなく演算子であるため、割り当てを再定義することはできません。ただし、AllYourCode クラスが Array から継承する場合、例は機能します。
Ruby が代入に遭遇すると、右辺を調べ、複数の右辺値がある場合はそれらを配列に集めます。次に左側を見ます。そこに左辺値が 1 つある場合は、配列が割り当てられます。
def foo
return "a", "b", "c" # three rvalues
end
x = foo # => x == ["a", "b", "c"]
左辺値が複数ある場合 (より具体的には、カンマがある場合)、右辺値を連続して割り当て、余分なものを破棄します。
x, y, z = foo # => x == "a", y == "b", z == "c"
x, y = foo # => x == "a", y == "b"
x, = foo # => x == "a"
あなたが発見したように、配列が返された場合も並列代入を行うことができます。
def bar
["a", "b", "c"]
end
x = bar # => x == ["a", "b", "c"]
x, y, z = bar # => x == "a", y == "b", z == "c"
x, y = bar # => x == "a", y == "b"
x, = bar # => x == "a"
したがって、あなたの例では、rb が配列であるか、配列から継承している場合、x と y には最初の 2 つの値が割り当てられます。