我试图理解在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
}
}
答案 0 :(得分:10)
这些功能称为 相关功能 。它们位于该类型的命名空间中。他们总是被称为Type::function()
。就你而言,那是Blob::generate_a_result()
。但是,为了引用您自己的类型,有一个特殊的关键字Self
。所以最好的解决方案是:
Self::generate_a_result()