首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为另一个泛型类型的特征绑定表达类型参数上的特征绑定?

如何为另一个泛型类型的特征绑定表达类型参数上的特征绑定?
EN

Stack Overflow用户
提问于 2015-11-29 05:49:09
回答 1查看 1.7K关注 0票数 5

我正在尝试改进一些现有的代码,通过添加一个类型变量来代替一个具体的类型,使它变得更通用。

原始代码如下所示:

代码语言:javascript
复制
fn parse_row(text: String) -> Result<Vec<u32>, String> {
    text.split(" ")
        .map(|s| s.to_owned()
            .parse::<u32>()
            .map_err(|e| e.to_string())
        )
        .collect()
}

下面是通用版本:

代码语言:javascript
复制
fn parse_row<T>(text: String) -> Result<Vec<T>, String>
where
    T: Copy + Debug + FromStr + Display,
{
    text.split(" ")
        .map(|s| s.to_owned()
            .parse::<T>()
            .map_err(|e| e.to_string())
        )
        .collect()
}

我得到的错误是:

代码语言:javascript
复制
error[E0599]: no method named `to_string` found for type `<T as std::str::FromStr>::Err` in the current scope
 --> src/main.rs:7:28
  |
7 |             .map_err(|e| e.to_string())
  |                            ^^^^^^^^^
  |
  = note: the method `to_string` exists but the following trait bounds were not satisfied:
          `<T as std::str::FromStr>::Err : std::string::ToString`

<T as core::str::FromStr>::Err引用的是与TFromStr实现相关的类型参数,但是我如何表示这个类型--我实际上不知道--具有Display特性呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-29 06:57:43

这一开始让人感到困惑,因为我不知道它指的是哪个错误--我以为它是ResultErr类型参数。一旦我发现FromStr有它自己的Err类型参数,我就必须弄清楚如何表达这个约束。这就是它:

代码语言:javascript
复制
fn parse_row<T>(text: String) -> Result<Vec<T>, String>
where
    T: Copy + Debug + FromStr,
    T::Err: Display,
{
    text.split(" ")
        .map(|s| s.to_owned()
            .parse::<T>()
            .map_err(|e| e.to_string())
        )
        .collect()
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33976810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档