Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 有没有一种方法可以在所有引用类型上实现迭代器的特性?_Rust - Fatal编程技术网

Rust 有没有一种方法可以在所有引用类型上实现迭代器的特性?

Rust 有没有一种方法可以在所有引用类型上实现迭代器的特性?,rust,Rust,我有一个特点 trait Foo<T> : Iterator<Item=T> { fn bar(&mut self) -> f64; } 有没有一种不重复地实现这一点的好方法 你可以用这个特质来做这个。如果您查看文档页面中的实现者,前三个在这里是相关的:这意味着f64,&'aF64和&'aMutF64都实现借用。您必须对迭代器生成的每个值调用该方法才能获得&f64 use std::borrow::Borrow; impl<T> Fo

我有一个特点

trait Foo<T> : Iterator<Item=T> {
    fn bar(&mut self) -> f64;
}
有没有一种不重复地实现这一点的好方法

你可以用这个特质来做这个。如果您查看文档页面中的实现者,前三个在这里是相关的:这意味着
f64
&'aF64
&'aMutF64
都实现
借用
。您必须对迭代器生成的每个值调用该方法才能获得
&f64

use std::borrow::Borrow;

impl<T> Foo<T::Item> for T
    where T: Iterator,
          T::Item: Borrow<f64>
{
    fn bar(&mut self) -> f64 {
        unimplemented!()
    }
}

我不知道如何一次完成这一切。但是,在不确切了解您的目标的情况下,您可能可以通过使用
Borrow
trait?将重复的代码移动到helper函数中。午餐休息时,我不得不在我的C#job工作场所playpen快速测试这一点。。所以我想得不够快,无法准确地理解语法。不过,我很高兴我走上了正确的道路@SimonWhitehead在集成测试运行时,您可以将锈迹斑斑的代码清除掉。然后在单元测试运行时。然后,当智能感知绘制曲线时@Shepmaster哈哈-我希望如此。在一天当中,RIST和.NET之间的上下文切换有点不和谐;即使我有5分钟的时间在集成测试运行时切换上下文:
use std::borrow::Borrow;

impl<T> Foo<T::Item> for T
    where T: Iterator,
          T::Item: Borrow<f64>
{
    fn bar(&mut self) -> f64 {
        unimplemented!()
    }
}
use std::borrow::Borrow;

trait Foo: Iterator {
    fn bar(&mut self) -> f64;
}

impl<T> Foo for T
    where T: Iterator,
          T::Item: Borrow<f64>
{
    fn bar(&mut self) -> f64 {
        unimplemented!()
    }
}