问题标签 [trait-objects]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2941 浏览

rust - 返回闭包的函数在我的过滤器中不起作用

如果不使用闭包,我无法编译它。我试图让函数apply首先返回正确类型的闭包。

我该怎么做才能让apply工作如我所愿?

0 投票
1 回答
79 浏览

rust - 有没有办法确定 VTable 中每个特征方法的偏移量?

我想我可以或多或少地尝试从头开始构建一个特征对象而不使用这些impl块。详细说明:

据我了解,成员函数出现在特征定义中的顺序并不总是与函数指针出现在 VTable 中的顺序相同。有没有办法确定 VTable 中每个特征方法的偏移量?

0 投票
2 回答
561 浏览

generics - 通过特征而不是结构参数化的变量?

我正试图围绕 Rust 的泛型。我正在写一些东西来从不同的网站中提取 HTML。我想要的是这样的:

我收到关于通过两种不同类型参数化的match返回s 的错误。Spider它期望它返回Spider<GoogleParser>,因为这是模式匹配的第一臂的返回类型。

我怎么能声明spider应该是 any Spider<T: CanGetTitle>

0 投票
2 回答
574 浏览

rust - RC到选项?

我正在尝试实现一个看起来像这样的方法:

但是,try_unwrap不适用于特征对象(这是有道理的,因为它们没有大小)。我的下一个想法是尝试找到一些Rc<Any>直接展开的函数Box<Any>。我能找到的最接近的东西是

但是,Rc::into_raw()似乎要求 to 中包含的类型RcSized,理想情况下我不想使用unsafe块。

有什么方法可以实现吗?

Playground Link,我正在寻找rc_to_box这里的实现。

0 投票
1 回答
733 浏览

rust - 匹配返回迭代器的臂?

我有一些代码尝试运行匹配,其中每个分支都可以返回不同的类型,但所有这些类型都实现了Iterator<Item=usize>.

...在哪里MatchingAs,,MatchingBsMatchingCs所有impl std::iter::Iterator<Item = usize>

我正在碰壁,因为Iterator它没有尺寸:

有没有一种好的方法让匹配臂返回具有共享特征的对象,然后(仅)依赖于该特征来处理结果?

0 投票
2 回答
3697 浏览

rust - 了解特征和对象安全

我正在努力解决对象安全的基础知识。如果我有这个代码

我收到

当我添加或删除: Sized作为超特征或作为f绑定时,我收到略有不同的错误消息。

有人可以解释一下:

  • 为什么这个特定的例子不起作用?特征对象一章指出:

    那么是什么让方法对象安全呢?每种方法都必须要求Self: Sized

    这不是实现了吗?

  • Trait: Sized和 和有什么不一样where Self: Sized?(嗯,是的,一个继承了 trait,另一个是参数绑定,但是从 Rust 的 trait 对象的角度来看?

  • 我必须做出的首选object_safety_dynamic改变是什么?

rustc 1.19.0-nightly (01951a61a 2017-05-20)如果重要,我正在使用。

解决关于固定尺寸的评论。

0 投票
3 回答
31941 浏览

generics - 特质不能变成对象

我有以下代码:

当我尝试编译它时,我收到错误消息:

我想我知道它为什么会发生,但是我如何从结构中引用特征呢?可能吗?也许还有其他方法可以实现相同的行为?

0 投票
2 回答
1089 浏览

rust - 和有什么区别盒子和&Trait / Box?

在编写带有特征的代码时,您可以将特征放入特征绑定中:

或直接在Boxor 引用类型中:

这些给出相同的输出。那么区别是什么呢?

(这个问题的灵感来自另一个问题,这只是几个混合概念之一)

0 投票
1 回答
417 浏览

generics - 是否可以自动实现将特征对象转换为另一个特征对象的特征?

我有一个特征可以管理到不同特征对象的转换。特征看起来像这样:(Boo并且Gee都是不同的特征)

为了减少样板代码的数量,我现在想自动将此实现更改为此,以防结构实现Boo/ Gee

如果只有一个其他特征我必须使用泛型转换为,我可以这样做:

但是,如果我也想自动实现FooGee,因为我无法实现Foo两次,因此它不能以这种方式工作,据我所知,Rust 不支持这种方式。

使用它也许可以实现这一点,Procedural Macros但我找不到对它们的任何深入解释,所以我现在有点卡住了。

0 投票
1 回答
278 浏览

rust - Rust 中的 trait 对象是如何实现的?

我试图了解特征对象是如何在 Rust 中实现的。请让我知道以下理解是否正确。

我有一个函数可以采用任何实现Write特征的类型:

在我们有实现此特征并调用上述函数的类型的任何地方,编译器都会生成一个“特征对象”,可能是通过添加对TraitObject::new(data, vtable).

如果我们有类似的东西:

可能会变成:

编译器内部some_func将仅访问基于TraitObject传递的 vtable 使用的方法。