这可能是一个非常愚蠢的问题,但我想知道是否可以从模块中公开类型。如果这听起来很模糊,我希望以下信息能够阐明我想要实现的目标。
假设我有以下文件结构:
Project
|-Units
| |-Length
| | |-Meter.rs
| | |-mod.rs
| |-mod.rs
|-main.rs
Run Code Online (Sandbox Code Playgroud)
Units/mod.rs 文件:
pub mod Length;
Run Code Online (Sandbox Code Playgroud)
单位/长度/mod.rs 文件:
pub mod Meter;
Run Code Online (Sandbox Code Playgroud)
单位/长度/Meter.rs 文件:
pub struct Meter
{
someValue: f64
}
// some implementation here
Run Code Online (Sandbox Code Playgroud)
现在,当我想在 main 中使用 Meter 结构时,我似乎需要编写以下内容:
let someMeter = Units::Length::Meter::Meter::new(5.3);
Run Code Online (Sandbox Code Playgroud)
我想写的是
let someMeter = Units::Length::Meter::new(5.3);
Run Code Online (Sandbox Code Playgroud)
尽管我不确定应该在 mod.rs 文件中更改什么才能实现此目的。我真的不想更改文件夹结构,因为我喜欢它的组织方式。任何对我做错了什么的洞察将不胜感激。
我承认在此示例中我没有遵循 Rust 命名约定。
我遇到的情况是,我们有一些由用户输入(单击按钮)运行的代码,这些代码运行一系列函数调用并生成一些数据(这是一个非常繁重的操作,需要几分钟)。我们想为此使用 Async 以便在我们执行此操作时它不会锁定 UI。
但同时我们也有一个要求,即这些功能也可以通过 API 使用,最好是同步的。
可视化/示例(伪代码):
public async void Button_Click() // from UI context
{
await instanceOfClassA.FuncA();
// some code
}
public async Task ClassA.FuncA()
{
await instanceOfClassB.FuncB()
// some code
}
public async Task ClassB.FuncB()
{
await instanceOfClassC.SomeHeavyFunc()
// some code
}
public async Task ClassC.SomeHeavyFunc()
{
// some heavy calculations
}
// Also need to provide a public synchronous API function
public void SomeClass.SynchronousAPIFunc()
{
// need to call differentInstanceOfClassB.FuncB()
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让公共 API 函数在内部等待异步操作?
编辑:在这篇文章中 …