有没有一种方法可以在rust中动态引用模块及其功能



当我完成《2021年代码降临节》时,我有一个main.rs文件,如下所示:

// # Day 1
if day1::is_complete() && print_complete || !day1::is_complete() {
day1::part1();
day1::part2();
} else {
println!("✅ Day 1 finished!")
}
// # Day 2
if day2::is_complete() && print_complete || !day2::is_complete() {
day2::part1();
day2::part2();
} else {
println!("✅ Day 2 finished!")
}
...

这种情况持续了整整25天。

每个模块都有一个称为part1part2的函数。

对于像pythoneval这样更简洁的文件,有没有这样的方法?

for day in 1..=25 {
let mod_name = convert_to_mod_name(day);
if mod_name::is_complete() && print_complete || !mod_name::is_complete() {
mod_name::part1();
mod_name::part2();
} else {
println!("✅ Day {day} finished!", day);
}

对于像pythoneval这样更简洁的文件,有没有这样的方法?

否。Python是一种动态语言。Rust是一种静态编译的语言。

最接近的方法是加载一个动态链接库。Rust没有一个稳定的ABI,除了一小部分用于FFI。这本质上是不安全的。

TL;DR:像代码的出现这样的东西是不值得的。

最新更新