Ruby Intro для параллельных заданий - PullRequest
0 голосов
/ 18 ноября 2018
a = [1, 2, 3, 4]

b,  c = 99, *a   → b == 99, c == 1
b, *c = 99, *a   → b == 99, c == [1, 2, 3, 4]

Может кто-нибудь, пожалуйста, подробно объяснил, почему в Ruby звездочка заставляет код возвращать то, что возвращает?Я понимаю, что если lvalue имеет звездочку, он присваивает rvalue этим lvalue.Однако почему '* a' make 'c' возвращает только значение '1' в массиве и почему '* a' и '* c' взаимно компенсируют друг друга?

1 Ответ

0 голосов
/ 18 ноября 2018

В обоих случаях 99, *a с правой стороны расширяется в массив [99, 1, 2, 3, 4]

В

b,  c = 99, *a

b и c становятся первыми двумя значениями массива, а остальная часть массива отбрасывается.

В

b, *c = 99, *a

b становится первым значением из массива, а c присваивается остальное (из-за знака слева).

99, *a справа является примером того, что квадратные скобки вокруг массива являются необязательными в присваивании.

Более простой пример:

a = 1, 2, 3 → a == [1, 2, 3]

Или более явная версия вашего примера:

example = [99, *a] → example == [99, 1, 2, 3, 4]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...