我知道这个标题听起来很奇怪,但基本上我正在用 Rust 创建一个数学库。我有 1 个结构,它具有微分、牛顿法、级数等基本功能,但我也有数值积分算法。我遇到的问题是我想通过
crate_name::Functions::Integration::<name_of_function>
调用我的积分算法,但我还没有找到方法。我真的不知道从哪里开始寻找解决方案,这也是我来这里的原因。
这是我的
src/
目录供参考:
src/
...lib.rs
...func/
......mod.rs
......functions.rs
......integration.rs
如果您需要,这里是相关目录的 github:https://github.com/VLambda/NumeriLib/tree/main/src/func
mod.rs:
mod functions;
mod integration;
pub use functions::*;
functions.rs:
use crate::func::integration::Integration;
pub struct Functions;
impl Functions {
pub fn right_riemann<F: Fn(f64) -> f64>(
function: F,
lower_limit: f64,
upper_limit: f64,
intervals: f64,
) -> f64 {
Integration::right_riemann(function, lower_limit, upper_limit, intervals)
}
}
整合.rs:
pub struct Integration;
impl Integration {
...
}
到目前为止,我已经做到了,您需要通过
crate_name::Functions::<name_of_function>
调用集成函数,但我认为如果我可以通过 crate_name::Functions::Integration::<name_of_function>
调用它会更好。 这对于我当前的代码是否可行,或者我是否需要彻底改变项目结构以适应这一点?
Rust 不是 Java。在 Rust 中,你不需要创建一个空的
struct
来保存自由函数,你可以(并且应该)简单地将自由函数直接放在模块中:
pub mod functions {
pub mod integration {
pub fn riemann() { todo!(); }
}
}
然后您只需使用
functions::integration::riemann()
即可调用该函数
当然,如果您愿意,您可以将模块拆分为单独的文件:
/// src/lib.rs
pub mod functions;
// src/functions.rs
pub mod integration;
// src/functions/integration.rs
pub fn riemann() { todo!(); }