Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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 有可能在trait实现中有一个局部变量吗?_Rust - Fatal编程技术网

Rust 有可能在trait实现中有一个局部变量吗?

Rust 有可能在trait实现中有一个局部变量吗?,rust,Rust,我有一个要迭代的可索引类型。它由一些元数据和一个数组组成。我需要首先遍历元数据的字节,然后遍历数组的字节。据我所知,迭代器不能具有trait实现的任何本地存储。我认为这是非常混乱的,我不希望我的数据类型被满足无关影响的需要所迷惑 impl Iterator for IndexableData { type Item = u8 let index : isize = 0; fn next(& mut self) -> Option<Item> { i

我有一个要迭代的可索引类型。它由一些元数据和一个数组组成。我需要首先遍历元数据的字节,然后遍历数组的字节。据我所知,迭代器不能具有trait实现的任何本地存储。我认为这是非常混乱的,我不希望我的数据类型被满足无关影响的需要所迷惑

impl Iterator for IndexableData {
  type Item = u8
  let index : isize = 0;
  fn next(& mut self) -> Option<Item> {
     if self.index > self.len() { None }
     if self.index > size_of::<Metadata> {
       Some (self.data[index - size_of::<Metadata>])
     } 
     Some (self.metadata[index])
  }
}
用于IndexableData的impl迭代器{ 类型项=u8 let索引:isize=0; fn下一步(&mut self)->选项{ 如果self.index>self.len(){None} 如果self.index>size\u of::{ 一些(self.data[index-size_of::]) } 一些(self.metadata[index]) } }

这就是我认为实现应该是什么样子。
索引
变量属于迭代器特征。不是我的
IndexableData
类型。如何实现这一点?

迭代器应该是一个单独的结构,其中包含对集合的引用以及它可能需要的任何其他数据(如此索引)。集合对象本身不应是迭代器。这不仅需要在集合中错误地放置额外的元数据,还将阻止您在集合上使用多个独立的迭代器。

迭代器应该是一个单独的结构,其中包含对集合的引用以及它可能需要的任何其他数据(如此索引)。集合对象本身不应是迭代器。这不仅需要在集合中错误放置额外的元数据,还将阻止您在集合中使用多个独立的迭代器。

您的问题与此非常相似:。啊,我不知道这个问题。我在搜索我所想的内容时没有找到它。你应该知道找到这个问题的解决方案:)Rust的终身语言文档记录得很差,类型参数化语言不可靠。在我这边,我有所有这些问题。你的问题和这个非常相似:。啊,我不知道那个问题。我在搜索我所想的内容时没有找到它。你应该知道找到这个问题的解决方案:)Rust的终身语言文档记录得很差,类型参数化语言不可靠。在我这方面,我有所有这一切,这最终使许多与其他特性的互操作变得非常不可靠。我的意思是,感兴趣的数据是程序员开始时想要关注的,但在遵循类型检查器的过程中,他们最终生成了所有这些辅助结构,它们隐藏在构成公共接口的一组无害方法的幕后。程序员对制作所有其他结构不感兴趣,因为这基本上只是语言强加的噪音。此外,当需要幕后特征之间的互操作时,这种噪音有可能使其他任务复杂化。@AdamMiller这并不是强迫你破坏一天的毫无意义的样板文件。迭代器(在这里使用的意义上)与我所知道的每种语言中的集合都是分开的(尽管有些语言使定义一次性迭代器变得更容易,例如Python中的生成器)。这在逻辑上是必要的,因为正如我所说的,您希望能够在一个集合上拥有多个迭代器,而不需要迭代器。[由于缺乏例子,我无法说明你关于“其他特征”的观点]。我并不反对——你只同意我所说的一半。首先,正确的做法是将其他数据类型与公共接口隔离,只显示尽可能简单的消费者api。但我要指出的问题是,有这么多类型的争论正在把它变成一场竞技表演。老实说,对于许多接口,我不希望再次使用该类型。对我来说,使用trait本地私有字段似乎是有意义的,编译器将使用这些字段自动派生结构。对我来说似乎没那么麻烦,但不可否认的是,有时候会更直观。这最终会让很多与其他特性的互操作变得非常不可靠。我的意思是,感兴趣的数据是程序员开始时想要关注的,但在遵循类型检查器的过程中,他们最终生成了所有这些辅助结构,它们隐藏在构成公共接口的一组无害方法的幕后。程序员对制作所有其他结构不感兴趣,因为这基本上只是语言强加的噪音。此外,当需要幕后特征之间的互操作时,这种噪音有可能使其他任务复杂化。@AdamMiller这并不是强迫你破坏一天的毫无意义的样板文件。迭代器(在这里使用的意义上)与我所知道的每种语言中的集合都是分开的(尽管有些语言使定义一次性迭代器变得更容易,例如Python中的生成器)。这在逻辑上是必要的,因为正如我所说的,您希望能够在一个集合上拥有多个迭代器,而不需要迭代器。[由于缺乏例子,我无法说明你关于“其他特征”的观点]。我并不反对——你只同意我所说的一半。首先,正确的做法是将其他数据类型与公共接口隔离,只显示尽可能简单的消费者api。但我要指出的问题是,有这么多类型的争论正在把它变成一场竞技表演。老实说,对于许多接口,我不希望再次使用该类型。对我来说,使用trait本地私有字段似乎是有意义的,编译器将使用这些字段自动派生结构。对我来说似乎没那么麻烦,但无可否认,只是有时候更直观。