Rust 为什么len()和_empty()没有在trait中定义?
锈病的大多数模式都是通过特征(特征(Rust 为什么len()和_empty()没有在trait中定义?,rust,traits,Rust,Traits,锈病的大多数模式都是通过特征(特征(Iterator,From,借用)捕获的 为什么像len/这样普遍的模式是空的在标准库中没有相关特征?这会导致我无法预见的问题吗?它被认为是无用的吗?或者只是没人想到(这似乎不太可能) 它被认为是无用的吗 我想这就是原因 如果知道某物是空的或长度为15,你会怎么做?几乎什么都没有,除非你也有办法访问集合的元素。统一收藏的特点是。尤其是迭代器可以告诉您它的基础集合有多少个元素,但它还可以做更多的事情 还请注意,如果您需要一个空的特征,您可以创建一个并为所有标准集
Iterator
,From
,借用
)捕获的
为什么像len
/这样普遍的模式是空的
在标准库中没有相关特征?这会导致我无法预见的问题吗?它被认为是无用的吗?或者只是没人想到(这似乎不太可能)
它被认为是无用的吗
我想这就是原因
如果知道某物是空的或长度为15,你会怎么做?几乎什么都没有,除非你也有办法访问集合的元素。统一收藏的特点是。尤其是迭代器可以告诉您它的基础集合有多少个元素,但它还可以做更多的事情
还请注意,如果您需要一个空的
特征,您可以创建一个并为所有标准集合实现它,这与大多数语言中的接口不同。这就是特质的力量。这也意味着标准库不需要为每个用例提供小的实用特性,它们可以由库提供
它被认为是无用的吗
我想这就是原因
如果知道某物是空的或长度为15,你会怎么做?几乎什么都没有,除非你也有办法访问集合的元素。统一收藏的特点是。尤其是迭代器可以告诉您它的基础集合有多少个元素,但它还可以做更多的事情
还请注意,如果您需要一个
空的
特征,您可以创建一个并为所有标准集合实现它,这与大多数语言中的接口不同。这就是特质的力量。这也意味着标准库不需要为每个用例提供小的实用特性,它们可以由库提供 谢谢你的回答。对于lentrait,我的一个用途是在包装类型实现它时实现包装类型,如中所示。当然,我可以创建trait并在现有类型上实现它(就像我在那个示例中所做的那样),但这可能会很乏味。此外,如果可以的话,迭代器
trait并没有统一集合:迭代器和它迭代的集合是两个不同的东西。迭代器不能轻易地给出底层集合的确切大小。您必须使用size\u hint
,这可能只会给您提供边界,或者使用count
,这会强制您迭代整个集合。这是可以的,因为不是所有迭代器都可以提前知道它们将生成多少项。但这就是为什么我们可以使用一个单独的Len
特征-你知道吗?这并不是因为ExactSizeIterator:Iterator
,因为同样,仅仅使用边界并不能做很多事情。您的包装器不是一个很好的示例。当然,如果一个东西包装了实现Whatever
特性的东西,那么它可能也可以实现Whatever
,但这并不能说明你可以用Whatever
做什么。我不是说Len
特性本身是非常有用的,但与IntoIterator
结合起来,它可能是。。。至于ExactSizeIterator
,谢谢你的链接,我不知道它,它确实很有用。但我的兴趣还是关于“集合”,而不是它产生的迭代器……谢谢你的回答。对于lentrait,我的一个用途是在包装类型实现它时实现包装类型,如中所示。当然,我可以创建trait并在现有类型上实现它(就像我在那个示例中所做的那样),但这可能会很乏味。此外,如果可以的话,迭代器
trait并没有统一集合:迭代器和它迭代的集合是两个不同的东西。迭代器不能轻易地给出底层集合的确切大小。您必须使用size\u hint
,这可能只会给您提供边界,或者使用count
,这会强制您迭代整个集合。这是可以的,因为不是所有迭代器都可以提前知道它们将生成多少项。但这就是为什么我们可以使用一个单独的Len
特征-你知道吗?这并不是因为ExactSizeIterator:Iterator
,因为同样,仅仅使用边界并不能做很多事情。您的包装器不是一个很好的示例。当然,如果一个东西包装了实现Whatever
特性的东西,那么它可能也可以实现Whatever
,但这并不能说明你可以用Whatever
做什么。我不是说Len
特性本身是非常有用的,但与IntoIterator
结合起来,它可能是。。。至于ExactSizeIterator
,谢谢你的链接,我不知道它,它确实很有用。但我的兴趣还是关于“集合”,而不是它产生的迭代器。。。