【发布时间】:2017-08-20 04:59:09
【问题描述】:
这是我尝试过的行为:
struct Matrix(f32, f32, f32, f32);
let matrix = Matrix(1.1, 1.2, 2.1, 2.2);
matrix.len(); // expected `4`
产生错误:
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`
std::iter::ExactSizeIterator 看起来不错,但我仍然不知道如何实现它
上下文
在尝试反转 Matrix 时,我意识到不是 dryly 像这样列出矩阵的反向索引:
fn reverse(matrix: Matrix) -> Matrix {
return Matrix(matrix.3, matrix.2, matrix.1, matrix.0)
}
我也许可以以相反的顺序遍历Matrix。我看到How to iterate or map over tuples? 并认为它很复杂。如果能够得到元组的长度,就可以解决“如何迭代或映射元组?”的问题。用更简单的解决方案。显然,我可以只使用 '4' 作为长度,但如果我不使用结构,而是使用未知长度的元组会怎样。
【问题讨论】:
-
就其本身而言,这似乎可能是XY problem,或者是一种误解。是什么让您期望已经有一种方法可以解决这个问题?您已经定义了自己的新数据类型
Matrix,因此您可以定义一个方法来获取长度,但给定您的示例,无论如何它只会返回一个常量。目前这个问题只是“我如何定义一个方法”。 -
好点。我在问一个 XY 问题。但是,为了自己解决问题,我提出了一个关于语言的基本问题。您链接到的问题的最佳答案建议发布上下文作为 XY 问题的解决方案,因此请参阅问题的编辑
-
@loganfsmyth 我已经编辑了我的问题