You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia不可变struct如何实现index不可变、Vector类型values字段可赋值

解决方案

你原本的代码报错是因为不可变结构体(struct)的字段绑定不可修改:list.values = new_values的本质是让values字段指向一个新的向量对象,属于修改字段绑定,违反了不可变结构体的约束。
但Vector本身是可变容器,你不需要修改字段绑定,只要修改values指向的原有向量的内容即可满足需求。

最优实现

function set_values!(list::NumberedList, new_values::Vector{Int64})
  list.values[:] = new_values
end

这个方案的优势完全匹配你的要求:

  • 保留NumberedList为不可变结构体,index字段始终不可修改
  • 没有使用逐元素push!的遍历实现,切片赋值是Julia内置的优化操作,底层直接进行批量内存拷贝,效率远高于逐元素操作
  • 自动适配new_values的长度,不管原有values的长度是多少,都会直接替换为新值的全部内容

如果你希望写法更显式,也可以用resize!加copyto!的实现,效果完全一致:

function set_values!(list::NumberedList, new_values::Vector{Int64})
  resize!(list.values, length(new_values))
  copyto!(list.values, new_values)
end

内容的提问来源于stack exchange,提问作者Alexander L. Hayes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:00:02