Дэвид Варела имеет правильный ответ: «используйте merge
». Это важная техника.
- Чтобы сделать это решение более доступным для других, вот несколько примеров.
при создании обычные кортежи (безымянные кортежи) и именованные кортежи
Оба кортежа и именованные кортежи создаются с использованием круглых скобок:
julia> a_tuple = (1, 2)
(1, 2)
julia> a_namedtuple = (a = 1, b = 2)
(a = 1, b = 2)
Если мы попытаемся создать кортеж или именованный кортеж с ровно одной записью, то же самое кстати, это не работает; вместо этого значениям присваиваются именованные переменные напрямую.
julia> not_a_tuple = ("xyz");
julia> not_a_tuple, typeof(not_a_tuple)
("xyz", String)
julia> not_a_namedtuple = (abc = "xyz");
julia> not_a_namedtuple, typeof(not_a_namedtuple)
("xyz", String)
Чтобы создать кортежи и именованные кортежи, которые имеют одно значение, мы дадим Джулии знать, что мы работаем с [именованными] кортежами. Простой способ сделать это, и тот, который работает для обоих типов кортежей, состоит в добавлении запятой '' 'перед закрывающей скобкой. Для наглядности я отделяю запятые от значений; это не обязательно делать в исходном коде.
julia> a_tuple = (0.5 ,)
(0.5,)
julia> a_namedtuple = (onehalf = 0.5 ,)
(onehalf = 0.5,)
при замене значений в NamedTuples
julia> namedtuple = (a = 1, b = 2, c = 3); # the initial NamedTuple
julia> changes_to_make = (b = 0 ,); # the modifications intended
julia> changed_namedtuple = merge(namedtuple, changes_to_make)
(a = 1, b = 0, c = 3)
julia> namedtuple = (a = 1, b = 2, c = 3); # the initial NamedTuple
julia> changes_to_make = (b = 0, c = 7); # the modifications intended
julia> changed_namedtuple = merge(namedtuple, changes_to_make)
(a = 1, b = 0, c = 7)