在多个文件中使用模块时,无法编译项目:“导入只能引用通过--extern传递的外部板条箱名称”

时间:2018-12-26 21:22:53

标签: module rust

我在 src 目录下有 main.rs bear.rs 。每次编译时,编译器都指向E0658。我已经阅读了E0658的文档,它告诉我这是一个不稳定的功能。

main.rs

Service
@Qualifier("userService")
@Transactional
public class UserRepositoryImpl implements UserRepository {

    @Autowired
    private EntityManager entityManager;

    @Override
    public <S extends Users> S save(S entity) {
        try {

            System.out.println("!!!!!!!!!! received entityManager.persist(entity);");

            entityManager.persist(entity);
        } catch (Exception e) {
            e.printStackTrace();             
        }
        return entity;
    }
    ...
}

bear.rs

mod bear;

use bear::factory::make_bear;

fn main() {
    println!("Hello, world!");
    let bear = make_bear();
}

当我编译这段代码时,我是从编译器得到的:

pub mod factory {
    pub fn make_bear() -> Bear {
        // code to instantiate Bear struct.
    }    
}

我是否必须等待Rust社区之间的共识,或者除了文档中的不便建议外,我现在还能做些什么吗?

1 个答案:

答案 0 :(得分:8)

更改

use bear::factory::make_bear;

use crate::bear::factory::make_bear;

这是一个更改in the 2018 edition of Rust。我不会在此页面上重新创建所有内容,但是我可以说这种改变的动机是双重的,一个是停止要求使用extern crate bear;指令,同时消除了在您拥有这种情况下可能出现的歧义。不仅是本地模块名称bear,而且还依赖于也称为bear的外部包装箱。