问题标签 [enum-dispatch]

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 回答
253 浏览

inheritance - 如何使用组合而不是继承?枚举调度?

我知道我应该使用组合而不是继承。

在 Java/C++ 中,我有一个抽象基类Vehicle(带有属性和常用方法)和实现它的类,例如CarBike.

我发现enum_dispatch,它在将方法调用从父级转发到子“类”方面做得很好。

  • 我应该在哪里存储公共数据,例如num_wheels哪些是 的属性Vehicle
  • 我应该在哪里定义Vehicle使用公共数据的方法?

目前,我必须将所有Vehicle数据和方法复制到每个枚举变体中,这越来越令人厌烦,因为它随着“方法”的数量和“类”的数量而扩展。

  • 我如何在 Rust 中惯用地做到这一点?
0 投票
1 回答
283 浏览

rust - 如何使用 enum_dispatch 的两个特征?

我试过了:

它似乎忽略了第一个之后的任何特征,默默地。

这会导致错误,因为在这种情况下,编译器似乎不相信 Foo 实现了 BazTrait。


更新:@kmdreko 的代码只要BazTraitFoo.

When BazTraitis 在另一个 crate 中,它也使用enum_dispatch,BazTrait被忽略并导致以下形式的两个错误:

#[enum_dispatch(BarTrait, BazTrait)]重要的是要注意或都没有错误pub enum Foo {

0 投票
0 回答
46 浏览

rust - TryInto trait 要求更多类型注释,即使所有注释都已到位

我有以下代码(受限示例)。有一个串行协议,使用crate 建模Command和枚举- 枚举中的每个变体都用一个结构表示。struct 任务负责 s 的序列化、执行和反序列化,用通用枚举(generic impl)或特定结构(templated impl)返回s。通用实现工作得很好,但模板化的实现无法编译。Responceenum_dispatchTransportCommandTransportResultResponce

当我尝试编译与上面相同的代码时,我收到以下错误:

我不明白,这里的错误是什么 - 我以为我已经在Transport::command_with_addr成员函数中说明了所有必要的类型注释。

注意,enum_dispatch使用以下代码生成try_into转换,在上面的代码中使用: