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

Rust中如何避免try_from消耗Read类型的可变引用?

Rust中从Read流反序列化嵌套结构体的TryFrom实现问题

我定义了如下结构体:

struct Triangle {
    normal: Normal,
    vertices: [Vertex; 3],
}

我希望从Read类型反序列化该结构体。考虑到字节流转Triangle可能失败,我觉得实现TryFrom是符合Rust风格的做法,于是写了如下代码:

impl TryFrom<&mut dyn std::io::Read> for Triangle {
  type Error = std::io::Error;
  fn try_from(reader: &mut dyn std::io::Read) -> Result<Self, Self::Error> {
    Ok(Self {
        normal: Normal::try_from(reader)?,
        vertices: [Vertex::try_from(reader)?, Vertex::try_from(reader)?, Vertex::try_from(reader)?]
    })
  }
}

我可以把对reader: &mut Read的所有操作都放在Triangle的实现里,但我有两个顾虑:

  • 希望每个对象的解析逻辑都放在各自的impl块中
  • 当我尝试解析多个Triangle来构建网格时,还是会遇到同样的问题

我开始怀疑实现TryFrom是不是正确的方案,但在放弃之前,想请教有没有简洁的方法,能让Normal::try_from和Vertex::try_from依次借用reader,同时符合Rust的所有权规则。

(注:我知道STL格式中每个三角形后有一个u16属性,只是还没处理)

内容的提问来源于stack exchange,提问作者Dave Fol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:45:23