- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
只是想知道如何将的特征与放入vec中?我以为这应该是一个常见的问题,但我从未搜索过答案。
这是代码:
use tokio::time::{delay_for, Duration};
#[async_trait::async_trait]
trait Interface: Default + Sized {
async fn update(&mut self) -> bool where Self: Sized;
}
struct Adder {
pub state: i32,
}
impl Default for Adder {
fn default() -> Self {
Self { state: 0 }
}
}
#[async_trait::async_trait]
impl Interface for Adder {
async fn update(&mut self) -> bool {
delay_for(Duration::from_millis(100)).await;
self.state = self.state + 1;
println!("Inc state to: {}", self.state);
return true;
}
}
struct Suber {
pub state: i32,
}
impl Default for Suber {
fn default() -> Self {
Self { state: 0 }
}
}
#[async_trait::async_trait]
impl Interface for Suber {
async fn update(&mut self) -> bool {
delay_for(Duration::from_millis(100)).await;
self.state = self.state - 1;
println!("Dec state to: {}", self.state);
return true;
}
}
fn main() {
let updaters: Vec<Box<dyn Interface>> = vec![Box::new(Adder::default()), Box::new(Suber::default())];
for mut u in updaters {
u.update();
}
}
但是我会得到错误:
error[E0038]: the trait `Interface` cannot be made into an object
--> src/main.rs:51:19
|
4 | trait Interface: Default + Sized {
| --------- ------- ----- ...because it requires `Self: Sized`
| | |
| | ...because it requires `Self: Sized`
| this trait cannot be made into an object...
...
51 | let updaters: Vec<Box<dyn Interface>> = vec![Box::new(Adder::default()), Box::new(Suber::default())];
| ^^^^^^^^^^^^^^^^^^^^^^^ the trait `Interface` cannot be made into an object
最佳答案
发生此错误是因为特征Interface
不满足object safety。
- It must not require
Self: Sized
- All associated functions must either have a
where Self: Sized
bound, or
- Not have any type parameters (although lifetime parameters are allowed), and
- Be a method that does not use
Self
except in the type of the receiver.- It must not have any associated constants.
- All supertraits must also be object safe.
trait Interface: Default + Sized
更改为
trait Interface
(因为
Default
也需要
Sized
)。但是我不知道这是否满足您的需求。 @UkonnRa
关于rust - 在Rust中,如何使自己具有 self 特质?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64095155/
我浏览了该网站和其他网站,找不到关于这种特质的任何解释,也找不到任何解决方案。 尽管在这些站点上有各种说法,但是Javascript和HTML5 DOM音频似乎无法在所有浏览器上正常工作,正如在各个站
beginGeneratingDeviceOrientationNotifications是否将状态栏重置回纵向? 在我的应用程序中,在下面记录 o 和 p: UIInterfaceOrientati
我开始意识到这是为初学者准备的: package Bad; has 'arr' => ( is => 'rw', 'ArrayRef[Str]' ); package main; my $bad =
只是想知道如何将的特征与放入vec中?我以为这应该是一个常见的问题,但我从未搜索过答案。 这是代码: use tokio::time::{delay_for, Duration}; #[async_t
更新 我的真正问题是由我的IDE自动导入了use std::borrow::{Borrow, BorrowMut};引起的。 在此行中,接受的答案为also doesn't compile。 解决方案
我正在尝试为 P/Invoke 正确编码(marshal)一些结构,但在 64 位操作系统上测试时发现奇怪的行为。 我有一个结构定义为: /// http://msdn.microsoft.com/e
说我有: abstract class D[T] {} trait A[T] { self => D[T] without B } trait B[T] { self => D[T] without
我尝试使用clap库创建一个简单的应用程序来解析命令行参数,并将其转换为Config自定义结构。我为我的结构实现了From特征,但是,当我尝试调用from函数时,收到以下错误: the trait b
在 Laravel 5.0 中,trait AuthenticatesAndRegistersUsers 中的方法 redirectPath 检查属性 redirectPath 或 redirectT
虽然这个问题有点与语言无关(就支持 Traits 的 OOP 语言而言)我一直在修补 PHP 5.4a 的夜间构建,并遇到了一个奇怪的场景。我似乎无法再运行我的安装,但那是另一回事了。 给定以下代码段
我是一名优秀的程序员,十分优秀!