出于推测目的,假设您有三个文件:main.rs
、struct.rs
和impl.rs
。您可以在 中定义一个结构体struct.rs
,将一个结构体放在impl
那里,再将另一个结构体放入impl
中impl.rs
,然后使用 中的两组impl
smain.rs
吗?如果是这样,怎么办?
项目结构:
main.rs:
use struct;
use impl;
main() {
let foobar = struct::Struct::new(); // defined in struct.rs
foobar.x(); // defined in impl.rs
}
struct.rs:
Define Struct, first impl
impl.rs:
Second impl
Run Code Online (Sandbox Code Playgroud) 最近我一直在学习高级 Rust。作为其中的一部分,我正在学习使用动态调度。
在我的修补过程中,我遇到了一些问题。由于某种原因,我似乎无法访问已使用框和动态调度分配给变量的结构字段。例如,
fn main() {
let z: Box<dyn S>;
z = Box::new(A::new());
println!("{}", z.val);
}
trait S {
fn new () -> Self where Self: Sized;
}
struct A {
val: i32,
}
impl S for A {
fn new () -> A {
A {val: 1}
}
}
struct B {
val: i32
}
impl S for B {
fn new() -> B {
B {val:2}
}
}
Run Code Online (Sandbox Code Playgroud)
产生错误消息“错误[E0609]:val
类型上没有字段Box<dyn S>
”
有什么方法可以访问这些字段,还是我需要拼凑一个解决方法?
在我当前的项目中,我尝试将 a 存储chrono::Duration
在配置结构中,该结构偶尔会使用serde_json
.
不幸的是,似乎Serialize
和Deserialize
并未针对chrono::Duration
. 也就是说,它通过其可选功能之一chrono
提供支持。serde
我尝试使用此方法,但现在编译器抱怨返回方法:
error[E0308]: mismatched types
--> src/config.rs:6:10
|
6 | #[derive(Serialize, Deserialize, Debug, Clone)]
| ^^^^^^^^^ expected struct `DateTime`, found struct `chrono::Duration`
|
= note: expected reference `&DateTime<Utc>`
found reference `&'__a chrono::Duration`
= note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0308]: mismatched types
--> src/config.rs:6:21
|
6 | #[derive(Serialize, Deserialize, Debug, …
Run Code Online (Sandbox Code Playgroud)