繁体   English   中英

如何在关联类型上定义特征边界?

[英]How do I define trait bounds on an associated type?

我想编写一个接受具有ToString特性的Iterator类型的函数。

我的想法是:

fn parse<T: Iterator /* ?T::Item : ToString? */>(mut args: T) -> Result<String, String> {
    match args.next() {
        Some(x) => x.to_string(),
        None => String::from("Missing parameter"),
    }
}

是的,您可以使用where子句做到这一点:

fn parse<T: Iterator>(mut args: T) -> Result<String, String>
where 
    <T as Iterator>::Item: ToString,
{
   // ....
}

或者,由于Item在这里的含义是明确的,因此界限可以是:

where T::Item: ToString

您可以使用Item =语法

fn parse<I: ToString, T: Iterator<Item = I>>(mut args: T) -> Result<String, String>

这允许您使用impl语法进一步简化:

fn parse<T: Iterator<Item = impl ToString>>(mut args: T) -> Result<String, String>

最后:

fn parse(mut args: impl Iterator<Item = impl ToString>) -> Result<String, String>

我认为这是一个更具可读性的替代方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM