Гарантированное ли деструктурирующее задание будет параллельным присвоением в Swift? - PullRequest
0 голосов
/ 29 октября 2019

Я смотрю на описание оператора присваивания в справочнике по языку Swift. Гарантируется ли, что задание на деструктурирование выполняется параллельно? В отличие от серийного назначения. Я не вижу этой точки зрения в описании оператора присваивания.

Просто чтобы прояснить, гарантируется ли, что (a, b) = (b, a) (где a и b равны var) эквивалентныв foo = a, a = b, b = foo, где foo - это переменная, которая гарантированно еще не существует, а не a = b, b = a (которая выдаст a и b оба содинаковое значение). Я попытался (a, b) = (b, a), и он работает параллельно, но это не то же самое, что документированное описание поведения.

1 Ответ

2 голосов
/ 29 октября 2019

Кортежи являются типами значений, и после их построения они не зависят от значений, которые являются их частью.

var a = 2
var b = 3
var t1 = (a, b)
print(t1) // (2, 3)
a = 4
print(t1) // (2, 3)

Таким образом, кортеж (a, b) содержит действительные значения двух переменных, поэтому(b, a) = (a, b) назначение работает без проблем. За кулисами фактическое присвоение (b, a) = (2, 3) (при условии, что a и b имеют значения из приведенного выше фрагмента кода).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...