有没有办法在 Rust 中动态引用模块及其函数?

Lac*_*343 10 rust

当我完成 Advent of Code 2021 时,我有一个main.rs如下所示的文件:

\n
// # Day 1\n    if day1::is_complete() && print_complete || !day1::is_complete() {\n        day1::part1();\n        day1::part2();\n    } else {\n        println!("\xe2\x9c\x85 Day 1 finished!")\n    }\n\n    // # Day 2\n    if day2::is_complete() && print_complete || !day2::is_complete() {\n        day2::part1();\n        day2::part2();\n    } else {\n        println!("\xe2\x9c\x85 Day 2 finished!")\n    }\n\n...\n
Run Code Online (Sandbox Code Playgroud)\n

这将持续 25 天。

\n

part1每个模块都有一个名为和的函数part2

\n

有没有办法对像 python 这样的更简洁的文件执行类似的操作eval

\n
for day in 1..=25 {\n   let mod_name = convert_to_mod_name(day);\n   if mod_name::is_complete() && print_complete || !mod_name::is_complete() {\n        mod_name::part1();\n        mod_name::part2();\n    } else {\n        println!("\xe2\x9c\x85 Day {day} finished!", day);\n    }\n   \n
Run Code Online (Sandbox Code Playgroud)\n

mca*_*ton 4

有没有办法对像 python 这样的更简洁的文件执行类似的操作eval

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

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

TL;DR:对于诸如代码的出现之类的事情来说,这是不值得的。