有没有一种方法可以在Rust中导入模块,而不知道其目录名?

时间:2020-02-19 19:14:13

标签: import module rust

我正在用Rust编写一个玩游戏的AI。策略模块包括一个带有处理特定情况的标准化模块的文件夹。我希望能够在我想处理的新情况下随时创建一个新模块。

我可以在Node中完成此操作。例如,在MVC设置中,您可能有

├── src
    ├── controllers
        ├── index.js
        └── ...
    ├── models
        ├── index.js
        └── ...
    └── views
        ├── index.js
        └── ...

包含一个controllers / index.js文件

////////////////////////////////////////////////////////////////////////////////
// Imports
////////////////////////////////////////////////////////////////////////////////

// Models
const models = require('../models');

// Modules
const fs   = require('fs');
const path = require('path');

////////////////////////////////////////////////////////////////////////////////
// Module
////////////////////////////////////////////////////////////////////////////////

const controllers = {};

const basename = path.basename(__filename);
fs.readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) &&
           (file !== basename) &&
           (file.slice(-3) === '.js');
  })
  .forEach(file => {
    controllers[file.slice(0,-3)] = require(`./${file}`)(models) ;   
  });

我可以在Rust中完成类似的事情吗?

1 个答案:

答案 0 :(得分:2)

否,无法在运行时导入模块。 Rust是一种静态编译语言。

您最能做的是编写a build script来枚举您的文件系统并生成适当的mod和/或use语句。

require(`./${file}`)(models)

Rust也没有导入的“默认导出”,因此该模式不存在。您必须从模块中调用一个专门命名的函数。

另请参阅: