not*_*row 10 traits rust associated-types
我想编写一个接受Iterator具有ToString特征的类型的函数。
我的想法是:
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"),
}
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*all 13
是的,你可以用一个where子句做到这一点:
fn parse<T: Iterator>(mut args: T) -> Result<String, String>
where
<T as Iterator>::Item: ToString,
{
// ....
}
Run Code Online (Sandbox Code Playgroud)
或者,因为这里的Item意思是明确的,所以界限可以是:
where T::Item: ToString
Run Code Online (Sandbox Code Playgroud)
您可以使用以下Item =语法:
fn parse<I: ToString, T: Iterator<Item = I>>(mut args: T) -> Result<String, String>
Run Code Online (Sandbox Code Playgroud)
这允许您使用以下impl语法进一步简化:
fn parse<T: Iterator<Item = impl ToString>>(mut args: T) -> Result<String, String>
Run Code Online (Sandbox Code Playgroud)
最后:
fn parse(mut args: impl Iterator<Item = impl ToString>) -> Result<String, String>
Run Code Online (Sandbox Code Playgroud)
我认为这是一个更具可读性的替代方案。
| 归档时间: |
|
| 查看次数: |
5302 次 |
| 最近记录: |