在一个新的Rust模块中,我可以写:
struct myStruct {
x : u32
}
impl myStruct {
fn new() -> myStruct{
myStruct{ x : other()}
}
fn other() -> u32 {
6
}
}
作为一个来自其他面向对象编程语言的开发者,我原本期望在new()
内能够调用other()
的方法。也就是说,我期望能够从同一类的另一个静态方法中调用一个静态方法。然而,rustc会输出以下错误信息:
error[E0425]: cannot find function `other` in this scope
--> dummy_module.rs:9:23
|
9 | myStruct{ x : other()}
| ^^^^^ not found in this scope
相比之下,以下Java代码可以顺利编译:
public class myStruct{
int x;
public myStruct(){
x = other();
}
private int other(){
return 5;
}
}
我不记得在我使用的 Rust 书中看到有关这个的提及,而且我似乎找不到清晰的在线答案。 我可以通过明确地将调用限定在 myStruct::other()
中来修复它,但这似乎很麻烦。 如果我尝试使用 use myStruct
,那么我会收到神秘的消息。
7 | use myStruct;
| ^^^ unexpected token
这种显式作用域始终是必需的吗?如果是,为什么?
我是否做错了什么?是否有惯用的解决方法?