gpt4 book ai didi

rust - Rust说不使用导入,并且无法同时找到导入的语句

转载 作者:行者123 更新时间:2023-12-03 11:46:05 33 4
gpt4 key购买 nike

我有一些要与Serde一起使用的结构。像这个:

use serde::{Serialize, Deserialize};

#[derive(Serialize)]
struct GetLinkResponse {
error: String,
link: String,
}

但是编译器说:
  • 不使用Serialize导入
  • 找不到
  • Serialize

  • error: cannot find derive macro `Serialize` in this scope
    --> src/structs.rs:3:10
    |
    3 | #[derive(Serialize)]
    | ^^^^^^^^^

    warning: unused imports: `Deserialize`, `Serialize`
    --> src/structs.rs:1:13
    |
    1 | use serde::{Serialize, Deserialize};
    | ^^^^^^^^^ ^^^^^^^^^^^
    |
    = note: `#[warn(unused_imports)]` on by default

    我想我对使用的工作方式还不了解。有人可以解释一下我在这里的错误吗?

    最佳答案

    您是自动特征实现背后的“魔术”(即过程宏)的受害者。通常,人们会为实现特性的过程宏提供与特性相同的名称(因为它很方便)。这里,有一个特征serde::Serialize,但是还有一个过程宏可以自动实现该特征serde::Serialize

    它们没有冲突,因为它们生活在不同的 namespace 中,并且编译器从上下文中推断出它是宏还是特征。

    在您的情况下,您忘记添加derive功能,因此serde中没有proc宏。因此,您要导入一个特征而不使用它,并尝试使用一个不存在的proc宏。

    解决方案是使用serde's derive feature:

    serde = { version = "1.0", features = ["derive"] }

    关于rust - Rust说不使用导入,并且无法同时找到导入的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60113832/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com