[英]How do I write the transpose function example from Rust by Example?
我正在關注示例教程中的 Rust,並且正在參加元組活動的第二部分,即使用reverse
ZC1C425268E68385D1AB5074C17A94F14 添加transpose
function。 這將接受一個矩陣作為參數並返回一個交換了兩個元素的矩陣。 例如:
println!("Matrix:\n{}", matrix);
println!("Transpose:\n{}", transpose(matrix));
預期成績:
Input Matrix:
( 1.1 1.2 2.1 2.2 )
Transposed output:
( 1.1 2.1 1.2 2.2 )
我找不到正確的代碼,這是我正在嘗試的:
// this is defined in the tutorial
#[derive(Debug)]
struct Matrix(f32, f32, f32, f32);
// this is my attempt that does not compile
fn transpose(maat: Matrix) -> (Matrix) {
let matrix = maat;
(matrix.0, matrix.2, matrix.1, matrix.3)
}
我不想為您提供完整的解決方案,因為如果您正在學習Rust,我會給您帶來損害。 在本教程的這一點上,您缺少一個關鍵要素。 不是你的錯。
Matrix是一個“元組結構”(有時也稱為新類型),在Rust的后面部分將通過示例進行介紹。 如果您想先睹為快,則在結構部分中,您將學習缺失的兩個部分。
第一步 : struct Matrix(f32, f32, f32, f32);
可以按照與簡單元組類似的方式來解構本教程中定義的。
如果您有一個let matrix = Matrix(1.1, 1.2, 2.1, 2.2);
您可以執行以下操作為其單個元素創建名稱:
let Matrix(r1c1, r2c2, r2c1, r2c2) = matrix
matrix.0
,您所做的工作( matrix.0
, matrix.1
...)也能工作
第二部分 。 當您要創建Matrix
的新實例時,可以執行Matrix(1.1, 1.2, 2.1, 2.2)
。 從嘗試編寫轉置開始,您試圖返回一個元組,但是像Matrix
這樣的元組結構是不同的,不兼容的類型(這就是為什么它也稱為“新類型”的原因)
以reverse
為例,重寫reverse
功能以接受f32
,
fn reverse(pair: (f32, f32)) -> (f32, f32) {
let (a, b) = pair;
(b, a)
}
fn transpose(mat: Matrix) -> Matrix {
let (a, b) = reverse((mat.1, mat.2));
Matrix(mat.0, a, b, mat.3)
}
你需要在這里做三件事:
impl fmt::Display for Matrix { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write,(f, "( {} {} )\n( {} {} )". self,0. self,1. self,2. self.3) } }
fn transpose(mat: Matrix) -> Matrix { return Matrix(mat.0, mat.2, mat.1, mat.3); }
println:("Transpose,\n{}"; transpose(matrix));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.