Я не могу иметь все черты и импл в одном файле; как разместить в отдельном файле? - PullRequest
0 голосов
/ 13 января 2019

У меня есть структура, черта и impl в файле верхнего уровня.

struct Model {}

trait TsProperties {
    fn create_ar_x_matrix(&self);
}

impl TsProperties for Model {
    fn create_ar_x_matrix(&self){}
}

Я хочу переместить черту и использовать отдельный файл с именем test.rs. В основном файле у меня есть:

mod test

В тесте у меня есть:

use crate::Model;

Когда я создаю экземпляр структуры, Intellisense не принимает create_ar_x_matrix. Если код в main.rs, то это так.

Как мне решить эту проблему?

Если я добавлю pub, я получу эту ошибку:

25 | pub impl TsProperties for Model {                                                                                                                        
   | ^^^ `pub` not permitted here because it's implied 

, если я использую pub для структуры в главном файле и помещаю черту в отдельный файл:

error[E0599]: no method named `create_ar_x_matrix` found for type `Model` in the current scope                                                                         
   --> src/main.rs:353:12                                                                                                                                                   
    |                                                                                                                                                                       
64  | pub struct Model {                                                                                                                                               
    | --------------------- method `create_ar_x_matrix` not found for this    

1 Ответ

0 голосов
/ 13 января 2019

Вам необходимо импортировать черту.

В test.rs:

use crate::Model;

pub trait TsProperties {
    fn create_ar_x_matrix(&self);
}

impl TsProperties for Model {
    fn create_ar_x_matrix(&self){}
}

В main.rs:

mod test;
use self::test::TsProperties;

struct Model {}

fn main() {
    let model = Model {};
    model.create_ar_x_matrix();
}

Обратите внимание, что Model не обязательно должен быть публичным, но эта черта нужна. Это потому, что все в родительском модуле автоматически видно в дочерних модулях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...