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

时间:2017-08-21 18:46:27

标签: function struct scope 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
    }
}

1 个答案:

答案 0 :(得分:10)

这些功能称为 相关功能 。它们位于该类型的命名空间中。他们总是被称为Type::function()。就你而言,那是Blob::generate_a_result()。但是,为了引用您自己的类型,有一个特殊的关键字Self。所以最好的解决方案是:

Self::generate_a_result()