gpt4 book ai didi

rust - 是否有可能在 Rust 的不同源文件中有一个模块

转载 作者:行者123 更新时间:2023-11-29 08:10:04 25 4
gpt4 key购买 nike

这实际上是一个两部分的问题:

  1. 我可以在 Rust 的单独文件中有一个模块吗?

enter image description here

这是我的文件布局。是否可以有一个单独的logging 模块并在该模块内定义一组结构/特征,但在单独的物理文件(logger、sql)中?

如果可能的话,这样的项目可以用当前的 Cargo 构建吗?

而且,如果可能的话,我如何在我的 app.rs 中引用我在 logging 模块中定义的结构?

我正在使用:rustc 0.12.0-pre-nightly (cf1381c1d 2014-07-26 00:46:16 +0000)

最佳答案

严格来说,你不能将一个模块拆分成不同的文件,但你不需要这样做,因为你可以定义子模块来达到类似的效果(这也是一种更好的解决方案)。

你可以这样安排你的模块:

src/app.rs
src/logging/mod.rs // parent modules go into their own folder
src/logging/logger.rs // child modules can stay with their parent
src/logging/sql.rs

下面是文件的样子

源/应用程序.rs

mod logging;

pub struct App;

fn main() {
let a = logging::Logger; // Ok
let b = logging::Sql; // Error: didn't re-export Sql
}

src/logging/mod.rs

// `pub use ` re-exports these names
// This allows app.rs or other modules to import them.
pub use self::logger::{Logger, LoggerTrait};
use self::sql::{Sql, SqlTrait};
use super::App; // imports App from the parent.

mod logger;
mod sql;

fn test() {
let a = Logger; // Ok
let b = Sql; // Ok
}

struct Foo;

// Ok
impl SqlTrait for Foo {
fn sql(&mut self, what: &str) {}
}

src/logging/logger.rs

pub struct Logger;

pub trait LoggerTrait {
fn log(&mut self, &str);
}

src/logging/sql.rs

pub struct Sql;

pub trait SqlTrait {
fn sql(&mut self, &str);
}

关于rust - 是否有可能在 Rust 的不同源文件中有一个模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25020058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com