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

Rust传递&i64参数时出现类型不匹配错误的解决求助

Rust传递&i64参数时出现类型不匹配错误的解决求助

看起来你遇到了一个典型的Rust类型匹配问题,我来帮你理清楚问题出在哪里以及对应的解决办法。

从报错信息来看,编译器提示调用from_req时第二个参数类型不匹配——期望&i64,但实际传入的user_id不符合这个类型。不过看你贴出的代码,create_proj的user_id参数是&i64,from_req的参数要求也是&i64,理论上应该是匹配的,可能是这些隐藏的小问题导致的:

  • 参数被意外修改类型:你有没有在create_proj函数里、调用from_req之前对user_id做过重新赋值?比如写了let user_id = *user_id;,这会把引用类型&i64转成值类型i64,再传递就会触发类型不匹配错误。如果是这种情况,要么把赋值后的变量改名,要么调用时传&user_id。

  • 编译缓存导致的误报:有时候Rust的编译缓存会引发奇怪的错误,你可以试试执行cargo clean清理缓存,然后重新编译项目,看看问题是否消失。

  • 调整参数类型(推荐方案):其实i64是Copy类型,传递引用并没有必要,反而增加代码复杂度。你可以修改from_req的参数为i64类型,这样不管传入的是i64还是&i64,Rust都会自动处理:

    修改from_req的定义:

    pub(crate) fn from_req(prj_name: &str, user_id: i64) -> Self {
        let uuid = Uuid::new_v4();
        let uuid_string = uuid.to_string().replace("-", "");
        Self {
            doc_name: prj_name.to_string(),
            created_time: get_current_millisecond(),
            updated_time: get_current_millisecond(),
            user_id, // 直接赋值,无需to_owned()
            doc_status: 1,
            template_id: 1,
            project_id: uuid_string
        }
    }
    

    这里顺便把prj_name的参数改成&str,它比&String更灵活,能接受更多类型的字符串输入。

    修改后调用时直接传user_id即可:

    let new_proj = TexProjectAdd::from_req(proj_name, user_id);
    
  • 保留引用参数的处理方式:如果一定要保留from_req的&i64参数要求,那先确认create_proj的user_id确实是&i64类型。如果user_id是i64类型,调用时需要传递它的引用:

    let new_proj = TexProjectAdd::from_req(proj_name, &user_id);
    

备注:内容来源于stack exchange,提问作者Dolphin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:13:08