我试图理解impl块中定义的函数的作用域到底是什么,但这些函数不接受&self作为参数.例如,为什么下面的代码块不编译?我得到错误"在这个范围内找不到函数generate_a_result".

pub struct Blob {
    num: u32,
}

impl Blob {
    pub fn new() -> Blob {
        generate_a_result()
    }

    fn generate_a_result() -> Blob {
        let result = Blob {
            num: 0
        };

        result
    }
}

推荐答案

这些函数称为associated functions.它们生活在类型的名称空间中.他们总是被称为Type::function()人.对你来说,这是Blob::generate_a_result().但是对于你自己的类型,有一个特殊的关键字Self.因此,最好的解决方案是:

Self::generate_a_result()

Rust相关问答推荐

给定使用newype习语定义的类型上的铁 rust Vec,有没有方法获得底层原始类型的一部分?

使用nom将任何空白、制表符、白线等序列替换为单个空白

常量泛型和类型枚举箱有重叠的用途吗?

对reqwest提供的这种嵌套JSON struct 进行反序列化

`actix-web` 使用提供的 `tokio` 运行时有何用途?

Rust 中什么时候可以返回函数生成的字符串切片&str?

结果流到 Vec 的结果:如何避免多个into_iter和collect?

详尽的匹配模式绑定

如何在 Rust 中打印 let-else 语句中的错误?

将 &str 或 String 保存在变量中

无法将`&Vec>`转换为`&[&str]`

在多核嵌入式 Rust 中,我可以使用静态 mut 进行单向数据共享吗?

分配给下划线模式时会发生什么?

有没有办法通过命令获取 Rust crate 的可安装版本列表?

在异步 Rust 中,Future 如何确保它只调用最近的 Waker?

Rust 跨同一文件夹中文件的可见性

为什么-x试图解析为文字并在声明性宏中失败?

如果我立即等待,为什么 `tokio::spawn` 需要一个 `'static` 生命周期?

当引用不再被borrow 时,Rust 不会得到它

为什么 Bevy 的 Trait 边界不满足 Rapier 物理插件?