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

Rust图边泛型结构体构造函数含if判断返回结构错误问题

错误原因分析

该错误不存在Rust的特殊行为,完全是代码逻辑书写错误导致的,具体问题有两点:

  • 误解了Rust命名字段结构体的初始化规则:Rust中带命名字段的结构体初始化时,字段的书写顺序不影响赋值结果,系统只会按字段名匹配对应值。你在if分支调换second、first的书写顺序,本质还是给结构体first字段赋值入参的first、second字段赋值入参的second,两个分支的返回结果完全一致,根本没有实现交换字段的效果。
  • 大小判断逻辑不符合需求:你的目标是让结构体first字段存储更小的索引,当前代码的判断条件if second > first逻辑写反,即便赋值逻辑正确也无法得到预期结果。
修复方案

可以先对两个入参索引做排序再赋值给结构体字段,示例代码如下:

impl<T> Edge<T> {
    pub fn new(first: Index, second: Index, weight: T) -> Self {
        Edge {
            first: first.min(second),
            second: first.max(second),
            weight
        }
    }
}

或者用条件表达式显式交换的写法:

impl<T> Edge<T> {
    pub fn new(first: Index, second: Index, weight: T) -> Self {
        let (first, second) = if first > second {
            (second, first)
        } else {
            (first, second)
        };
        Self { first, second, weight }
    }
}

内容的提问来源于stack exchange,提问作者Tomasz Bawor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 19:27:03