В Python можно использовать оператор *
при распаковке итерации.Julia splat operator распаковка
In [1]: head, *tail = [1, 2, 3, 4, 5]
In [2]: head
Out[2]: 1
In [3]: tail
Out[3]: [2, 3, 4, 5]
Я хотел бы произвести такое же поведение в Юлии. Я понял, что оператор эквивалент ...
будет работать, но, похоже, он просто создает ошибку в этом контексте.
julia> head, tail... = [1, 2, 3, 4, 5]
ERROR: syntax: invalid assignment location "tail..."
Мне удалось получить результаты, которые я хочу использовать, но это уродливое решение.
julia> head, tail = A[1], A[2:end]
(1,[2,3,4,5])
Могу ли я распаковать массив таким образом, что tail
будет содержать остальные элементы после head
с помощью пейнтбольный (...
) оператора? Если нет, то какая самая чистая альтернатива?
Edit: Эта функция была предложена в #2626. Похоже, что это будет часть релиза 1.0.
Я не думаю, что 'head, tail = A [1], A [2: end]' уродливый, он явно сообщает, что такое 'head' и' tail'. если 'A' не имеет потенциального использования, используя' head, tail = shift! (A), A' немного более эффективен. – Gnimuc
@Gnimuc Это становится все более уродливым, так как больше предметов нужно распаковывать. 'a, b, c, * d = [1,2,3,4,5]' намного чище, чем использование большого количества индексирования или 'shift!' ing, IMHO. :) –
Это похоже на работу для макроса. –