3
我试图通过Rust by Example website上的“Tuple课程”,但我被卡在格式化的输出实现上。我有这样的代码,它打印传递矩阵:获取字符串作为格式化输出中的值
#[derive(Debug)]
struct Matrix{
data: Vec<Vec<f64>> // [[...], [...],]
}
impl fmt::Display for Matrix {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let output_data = self.data
// [[1, 2], [2, 3]] -> ["1, 2", "2, 3"]
.into_iter()
.map(|row| {
row.into_iter()
.map(|value| value.to_string())
.collect::<Vec<String>>()
.join(", ")
})
.collect::<Vec<String>>()
// ["1, 2", "2, 3"] -> ["(1, 2)", "(2, 3)"]
.into_iter()
.map(|string_row| { format!("({})", string_row) })
// ["(1, 2)", "(2, 3)"] -> "(1, 2),\n(2, 3)"
.collect::<Vec<String>>()
.join(",\n");
write!(f, "{}", output_data)
}
}
但是,编译器打印一条消息:
<anon>:21:40: 21:44 error: cannot move out of borrowed content [E0507]
<anon>:21 let output_data = self.data
^~~~
<anon>:21:40: 21:44 help: see the detailed explanation for E0507
error: aborting due to previous error
playpen: application terminated with error code 101
我试着换output_data
的成绩为RefCell
,但编译仍然打印此错误。我如何解决这个问题,以便write!
宏能够正常工作?