Rust 返回锈蚀类型

Rust 返回锈蚀类型,rust,Rust,我试图创建一个trait(StringToTable),它返回一个结构,并实现另一个trait(Table) 当我读到这个答案时,我尝试了“盒式”方法,但没有成功 我不知道调用我的StringToTable时的结构类型,所以我不能使用像“to_table”或“StringToTable”这样的方法 出现以下错误的情况: 我的代码: 1°进近: fn to_table(table:String)->选项; 我得到: error[E0225]:只有自动特征可以用作特征对象中的附加特征 -->src

我试图创建一个trait(StringToTable),它返回一个结构,并实现另一个trait(Table)

当我读到这个答案时,我尝试了“盒式”方法,但没有成功


我不知道调用我的StringToTable时的结构类型,所以我不能使用像“to_table”或“StringToTable”这样的方法

出现以下错误的情况:

我的代码:

1°进近:

fn to_table(table:String)->选项;
我得到:

error[E0225]:只有自动特征可以用作特征对象中的附加特征
-->src/main.rs:18:75
|
18 | fn to_table(table:String)->选项;
|                                                        ----------------   ^^^^^^^^^
|                                                        |                  |
||额外的非自动特征
||特征对象类型中使用的特征别名(额外使用)
|第一非自特性
|trait对象类型中使用的trait别名(首次使用)
2°进近:

fn to_table2(table:String)->选项,其中T:DeserializeOwned+Serialize+SearchIndex;
我得到:

错误[E0412]:在此作用域中找不到类型'T'
-->src/main.rs:20:68
|
20 | fn to_table2(table:String)->选项,其中T:DeserializeOwned+Serialize+SearchIndex;
|^在此范围内找不到
**我的代码被简化了


我试图做的是:在tcp服务器上接收一个随机名称,并获得它的等效结构。

在第二种方法中,您可以通过声明类型参数T来修复编译错误。您可以在函数或trait上执行此操作

关于功能:

fn to_table2<T>(table: String) -> Option<Box<dyn Table<T>>> where T: DeserializeOwned + Serialize + SearchIndex;
fn to_table2(table:String)->选项,其中T:DeserializeOwned+Serialize+SearchIndex;
关于特质:

pub trait StringToTable<T> where T: DeserializeOwned + Serialize + SearchIndex {

    fn to_table2(table: String) -> Option<Box<dyn Table<T>>>;
}
pub-trait-StringToTable,其中T:DeserializeOwned+Serialize+SearchIndex{
fn至_表2(表:字符串)->选项;
}
另一个选项是使用关联类型:

pub trait StringToTable {
    type T : DeserializeOwned + Serialize + SearchIndex;

    fn to_table2(table: String) -> Option<Box<dyn Table<Self::T>>>;
}
pub-trait-StringToTable{
类型T:反序列化拥有+序列化+搜索索引;
fn至_表2(表:字符串)->选项;
}

我不知道调用我的StringToTable时的结构类型,所以我不能使用类似“to_table”或“StringToTable”的方法。。。to_table函数可以返回traits'DeserializeOwned+Serialize+SearchIndex'的任何实现。我想有人需要知道使用的结构类型。应在已知的位置添加类型参数。可能相关类型(请参见上面的编辑)对此有所帮助。你能分享一个你计划如何使用Table和StringToTable特性的例子吗?关联的类型在playgound上工作。稍后我将使用我的真实来源进行测试。谢谢你现在我测试了相关的类型,但是现在我的问题是这个特性的实现。我得到反序列化拥有和序列化类型的“错误[E0225]:只有自动特征可以用作特征对象中的附加特征”。一个新的PlayGround错误:这是我的实现