如何调用单独的结构,并将其导入到结构的另一个 impl 特征中?

问题描述 投票:0回答:1

我知道这个标题听起来很奇怪,但基本上我正在用 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 rust-cargo cargo
1个回答
0
投票

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!(); }
© www.soinside.com 2019 - 2024. All rights reserved.