В новом модуле Rust я могу написать:
struct myStruct {
x : u32
}
impl myStruct {
fn new() -> myStruct{
myStruct{ x : other()}
}
fn other() -> u32 {
6
}
}
Исходя из других ОО-языков, я ожидаю, что other()
будет в области действия new()
. То есть я ожидал, что смогу вызвать один статический метод класса из другого статического метода того же класса. Однако 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
Всегда ли необходим этот явный обзор? Если так, то почему?
Я делаю что-то неправильно? Есть ли идиоматическое обходное решение?