这是我尝试过的行为:
error[E0599]: no method named `len` found for type `&tuples::Matrix` in the current scope
--> src/tuples.rs:19:44
|
19 | println!("matrix length: {}", self.len());
| ^^^
|
= help: items from traits can only be used if the trait is implemented and in scope
= note: the following traits define an item `len`, perhaps you need to implement one of them:
candidate #1: `std::iter::ExactSizeIterator`
candidate #2: `core::slice::SliceExt`
candidate #3: `core::str::StrExt`
产生错误:
Matrix
std::iter::ExactSizeIterator
看起来很合适,但我仍然不知道如何实施
在试图反转fn reverse(matrix: Matrix) -> Matrix {
return Matrix(matrix.3, matrix.2, matrix.1, matrix.0)
}
时,我意识到代替dryly列出了矩阵的反向索引,如下所示:
Matrix
我可能会以相反的顺序迭代Output of uname -r:
root@vkalyanam-Lenovo-B41-80:~/realtek# uname -r
4.11.0
Realtek ethernet Sources:
root@vkalyanam-Lenovo-B41-80:~/realtek# ls
cscope.out icmp icmp2_recev logs_kernel Makefile out realtek.c tags
Upon make,
realtek.ko module has created, but i was not able to load it.
。我看到How to iterate or map over tuples?并认为它很复杂。如果一个人能够获得元组的长度,就可以解决问题"如何迭代或映射元组?"用更简单的解决方案。显然,我可以使用' 4'作为长度,但如果我没有使用结构而是使用未知长度的元组,那该怎么办呢。
答案 0 :(得分:2)
有几种方法可以解决这个问题。我会尽量扩大。
matrix.len(); // expected `4`
您已经定义了自己的Matrix
数据类型。没有额外的逻辑,完全取决于你来定义它,例如
impl Matrix {
fn len(&self) -> usize {
4
}
}
就我个人而言,我认为你的reverse
功能是正常的,因为平衡DRY与可读性很重要,并且通过重复逻辑来区分重复代码。
另一件作品是,长度本身并不能提供太多。 matrix.0
是Rust中的显式语法,但是没有办法实际使用长度来做任何事情。 matrix[i]
不是您在数据类型上实现的操作。 可以可能为此类型实现或Iterator
,但这看起来并不像您在此实际需要的那样。迭代器是一致的项目流,但是您的矩阵项具有基于其索引的明确含义,这些索引会在迭代器的上下文中失去意义。
我还要补充一点,您可以使用解构分配和自动返回来减少reverse
,
fn reverse(matrix: Matrix) -> Matrix {
let Matrix(a, b, c, d) = matrix;
Matrix(d, c, b, a)
}
答案 1 :(得分:0)
在锈中,您不能迭代或要求元组长度。 元组的实现方式类似于struct(如果愿意,可以使用匿名struct)。 考虑到具有不同类型的元组/结构,它的长度是多少?