结构拥有函数的Rust范围规则

Sco*_* L. 8 struct scope function rust

我试图了解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
    }
}
Run Code Online (Sandbox Code Playgroud)

Luk*_*odt 12

这些函数称为关联函数.它们位于该类型的命名空间中.他们总是被称为像Type::function().在你的情况下,那是Blob::generate_a_result().但是,为了引用您自己的类型,有特殊关键字Self.所以最好的解决方案是:

Self::generate_a_result()
Run Code Online (Sandbox Code Playgroud)