Rust 编译器:“警告:字段 `somebool` 永远不会被读取”,因为结构体字段仅在第二个非特征实现中引用

问题描述 投票:0回答:1

这可能是我还不知道的功能。我有这样的编译器消息:

$ 货物构建--lib 编译 secondaryimpl v0.1.0 (/home/nsdd/garage/sames/rustex/secondimpl) 警告:字段

somebool
永远不会被读取 --> src/lib.rs:6:5 | 5 | pub 结构示例结构 { | ------------- 该结构中的字段 6 |一些布尔:布尔, | ^^^^^^^^ | = 注意:
#[warn(dead_code)]
默认开启

警告:关联函数

playhere
从未使用过 --> src/lib.rs:31:8 | 31 | fn playhere(&self) -> usize { | ^^^^^^^^

警告:

secondimpl
(lib)生成了 2 个警告 在 0.16 秒内完成了开发 [未优化 + 调试信息] 目标

这是我的示例代码:

pub trait ExampleTrait {
    fn new(mynum: usize) -> Self;
}

pub struct ExampleStruct {
    somebool: bool,
    somenum: usize,
}

impl Default for ExampleStruct {
    fn default() -> Self {
        ExampleStruct {
            somebool: true,
            somenum: 999,
        }
    }
}

impl ExampleTrait for ExampleStruct {

    fn new(mynum: usize) -> Self {
        let mut buffer: ExampleStruct = Default::default();
        buffer.somenum = mynum;
        return buffer;
    }

}

impl ExampleStruct {

    fn playhere(&self) -> usize {
        if self.somebool {
            return self.somenum;
        }
        return 0;
    }

}

所以因为我只在第二个实现中使用 self.somenum ,所以编译器似乎不喜欢它。据推测,我可以进行一些声明或语法更改来阻止此警告,因为这显然是一个没有考虑第二个实现的问题。该字段是其他 Trait 中不会出现的东西,所以我不能将其放在 Traits 中。

rust compiler-warnings rust-cargo
1个回答
0
投票

Rust 考虑传递性地使用什么。是的,该字段是从

ExampleStruct::play_here()
读取的,但是 这个函数永远不会被调用。 因为该函数没有被调用,所以在决定是否使用程序中的其他内容时它是无关紧要的。

© www.soinside.com 2019 - 2024. All rights reserved.