92得票4回答
什么使得一个对象成为“trait object”?

最近 Rust 的变化使 "trait objects" 对我来说更加突出,但我只有模糊的理解,不知道是什么让某些东西成为 trait object。特别是一个变化是 即将到来的变化 允许 trait objects 将 trait 实现转发到内部类型。 给定一个 trait Foo,我很确...

70得票1回答
在 Rust 中在线程之间发送 trait 对象

我想在线程之间发送特质对象,但无法确定是否可能。似乎不行,因为它们显然不满足Send特质。 以下代码演示了我尝试的内容:use std::{ sync::mpsc::{channel, Receiver, Sender}, thread, }; trait Bar { ...

49得票3回答
特性无法转换为对象

我有如下代码:extern crate futures; // 0.1.24 use futures::Future; use std::io; struct Context; pub trait MyTrait { fn receive(context: Context) -&...

18得票3回答
为什么`&(?Sized + Trait)`不能转换为`&dyn Trait`?

以下代码中,无法从实现相同trait的动态大小类型的引用中获取trait对象的引用。为什么会这样?如果我可以使用&dyn Trait和&(?Sized + Trait)来调用Trait方法,那么它们之间的区别是什么? 实现FooTraitContainerTrait的类型可能...

13得票1回答
&mut和ref mut在特质对象中的区别

首先,我并不是在询问&mut和ref mut之间到底有什么区别。 我之所以问这个问题,是因为我认为:let ref mut a = MyStruct 与...相同let a = &mut MyStruct 考虑从函数中返回一个特性对象。你可以返回一个 Box<Trait...

13得票2回答
“<T: Trait> Box<T>” 和 “&Trait / Box<Trait>” 有什么区别?

使用 trait 编写代码时,可以将 trait 放在 trait bound 中: use std::fmt::Debug; fn myfunction1&lt;T: Debug&gt;(v: Box&lt;T&gt;) { println!("{:?}", v); } fn ...

12得票2回答
无法克隆Vec<Box<Trait>>,因为Trait不能成为一个对象。

我正在尝试克隆一个装箱特质向量。显然,仅在实现我的特质的所有结构体上简单地派生 Clone 是不够的,因为编译器在编译时不知道实现该特质的所有结构体都有 Clone。 好吧,然后我试图将 Clone 用作超特质,但这只会导致标题中的错误。我对解决方案感到困惑。 以下是最小工作实现(或不起作...

12得票1回答
如何从一个对象安全的特质对象中移动值?

一个Mech搭载了一个驾驶员,这是一个Named实体。在运行时,省略的Mech构造函数会向外部资源查询要使用的具体驾驶员类型。 trait Named { fn name(self) -&gt; String; } struct Person { first_name: S...

12得票1回答
闭包返回函数在我的筛选器中无法正常工作

我无法在没有使用闭包的情况下编译它。 我试图让函数 apply 一开始就返回正确类型的闭包。 #![feature(conservative_impl_trait)] #![allow(dead_code)] fn accumulate&lt;'a&gt;(tuples: &amp;[(&...

12得票2回答
为什么带有泛型类型参数的trait方法不安全?

为了引用《Rust 程序设计语言》中的一段话(强调是我的),如下所示: 同样适用于泛型类型参数,当 trait 使用时使用具体类型参数填充:具体类型成为实现 trait 的类型的一部分。当通过使用 trait 对象来遗忘类型时,就无法知道要使用哪些类型来填充泛型类型参数。 我无法理解其...