Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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 为什么len()和_empty()没有在trait中定义?_Rust_Traits - Fatal编程技术网

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
,谢谢你的链接,我不知道它,它确实很有用。但我的兴趣还是关于“集合”,而不是它产生的迭代器。。。