Skip to content

Instantly share code, notes, and snippets.

@thomasbrus
Last active August 29, 2015 14:01
Show Gist options
  • Save thomasbrus/9cafd1b209ae0e0d4e6f to your computer and use it in GitHub Desktop.
Save thomasbrus/9cafd1b209ae0e0d4e6f to your computer and use it in GitHub Desktop.
Multiple assignment with splat operator
arr1 = [1, 2, 3, 4]
arr2 = [1, 2, 3, 4]
*a, b, c = *arr1
puts [a, b, c].inspect # => [[1, 2], 3, 4]
puts arr1.inspect # => [1, 2]
d, *e, f = *arr2
puts [d, e, f].inspect # => [1, [2, 3], 4]
puts arr2.inspect # => [1, 2, 3, 4]
============= :__script__ ==============
Arguments: 0 required, 0 post, 0 total
Arity: 0
Locals: 8: arr1, arr2, a, c, b, d, e, f
Stack size: 12
Literals: 3: :pop, :inspect, :puts
Lines to IP: 4: 0..10, 5: 11..21, 7: 22..44, 9: 45..61, 10: 62..72, 12: 73..92, 14: 93..109, 15: 110..122
0000: meta_push_1
0001: meta_push_2
0002: push_int 3
0004: push_int 4
0006: make_array 4
0008: set_local 0 # arr1
0010: pop
0011: meta_push_1
0012: meta_push_2
0013: push_int 3
0015: push_int 4
0017: make_array 4
0019: set_local 1 # arr2
0021: pop
0022: push_local 0 # arr1 # [[1, 2, 3, 4]]
0024: cast_array # [[1, 2, 3, 4]]
0025: dup_top # [[1, 2, 3, 4], [1, 2, 3, 4]]
0026: dup_top # [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
0027: send_stack :pop, 0 # [4, [1, 2, 3], [1, 2, 3, 4]]
0030: set_local 3 # c # `c = 4`
0032: pop # [[1, 2, 3], [1, 2, 3, 4]]
0033: dup_top # [[1, 2, 3], [1, 2, 3], [1, 2, 3, 4]]
0034: send_stack :pop, 0 # [3, [1, 2], [1, 2, 3, 4]]
0037: set_local 4 # b # `b = 3`
0039: pop # [[1, 2], [1, 2, 3, 4]]
0040: cast_array # [[1, 2], [1, 2, 3, 4]]
0041: set_local 2 # a # `a = [1, 2]`
0043: pop # [[1, 2, 3, 4]]
0044: pop # []
0045: push_self
0046: push_local 2 # a
0048: push_local 4 # b
0050: push_local 3 # c
0052: make_array 3
0054: send_stack :inspect, 0
0057: allow_private
0058: send_stack :puts, 1
0061: pop
0062: push_self
0063: push_local 0 # arr1
0065: send_stack :inspect, 0
0068: allow_private
0069: send_stack :puts, 1
0072: pop
0073: push_local 1 # arr2
0075: cast_array
0076: dup_top
0077: shift_array
0078: set_local 5 # d
0080: pop
0081: dup_top
0082: send_stack :pop, 0
0085: set_local 7 # f
0087: pop
0088: cast_array
0089: set_local 6 # e
0091: pop
0092: pop
0093: push_self
0094: push_local 5 # d
0096: push_local 6 # e
0098: push_local 7 # f
0100: make_array 3
0102: send_stack :inspect, 0
0105: allow_private
0106: send_stack :puts, 1
0109: pop
0110: push_self
0111: push_local 1 # arr2
0113: send_stack :inspect, 0
0116: allow_private
0117: send_stack :puts, 1
0120: pop
0121: push_true
0122: ret
----------------------------------------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment