Есть ли способ импортировать модуль в Rust, зная его каталог, но не имя файла? - PullRequest
0 голосов
/ 19 февраля 2020

Я пишу игровой ИИ в Rust. Модуль стратегии содержит папку со стандартными модулями, которые обрабатывают определенные c ситуации. Я хочу иметь возможность создавать новый модуль в любое время, когда я думаю о новой ситуации, которую я бы хотел обработать.

Я могу выполнить 1011 * это в узле. Например, в настройке MVC вы можете иметь

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

с контроллером / индексом. 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) ;   
  });

Могу ли я выполнить sh нечто подобное в ржавчине?

1 Ответ

2 голосов
/ 19 февраля 2020

Нет, нет способа импортировать модуль во время выполнения; Rust - это статически скомпилированный язык.

Самое близкое, что вы могли бы сделать, это написать скрипт сборки , который перечисляет вашу файловую систему и генерирует соответствующие mod и / или use заявления.

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

Rust также не имеет «экспорта по умолчанию» импорта, поэтому этот шаблон не может существовать. Вам придется вызывать функцию с определенным именем из модуля.

См. Также:

...