我有一个元组:
my_tup=(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9)
Run Code Online (Sandbox Code Playgroud)
我想修改这个元组中的一个值。因为元组是不可变的,所以明显的路线不起作用:
my_tup[:a]=50 #Raises an error, as expected
Run Code Online (Sandbox Code Playgroud)
因此,要执行修改,我想在更改目标元素的同时复制元组及其元素。
我目前的解决方案如下:
my_tup=(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9)
args = keys(my_tup)
NamedTuple{args}(i!=:a ? getfield(my_tup, i) : 50 for i in args)
Run Code Online (Sandbox Code Playgroud)
但这似乎很冗长,或者好像标准库中应该已经有一个函数了。
有没有更好的办法?
您可以使用merge两个命名元组:
julia> xs = (a = 1, b = 2, c = 3)
(a = 1, b = 2, c = 3)
julia> ys = merge(xs, (; a = 50))
(a = 50, b = 2, c = 3)
Run Code Online (Sandbox Code Playgroud)