1
我想實現一個方法:如何在嘗試實施方法時修復「錯誤的類型參數數量」?
struct Point<T> {
x: T,
y: T,
}
struct Line<T> {
start: Point<T>,
end: Point<T>,
}
impl Line {
fn length(&self) -> f64 {
let dx: f64 = self.start.x - self.end.x;
let dy: f64 = self.start.y - self.end.y;
(dx * dx + dy * dy).sqrt()
}
}
fn main() {
let point_start: Point<f64> = Point { x: 1.4, y: 1.24 };
let point_end: Point<f64> = Point { x: 20.4, y: 30.64 };
let line_a: Line<f64> = Line {
start: point_start,
end: point_end,
};
println!("length of line_a = {}", line_a.length());
}
我得到這個錯誤:
error[E0243]: wrong number of type arguments: expected 1, found 0
--> src/main.rs:11:6
|
11 | impl Line {
| ^^^^ expected 1 type argument
是什麼原因造成這個問題?
所以這意味着,當我定義了一個類型,從這一點上我時,我用它來輸入。 – user3419211
@ user3419211 Rust可以在許多情況下推斷出類型,但對於需要指定它的'impl'塊和函數。這個特殊的'length'實現取決於'self.start.x'/etc。是'f64',所以你必須告訴Rust它只適用於那些。但是,你可以將這個類型從變量聲明中刪除(因爲它已經存在於'impl'中,所以只需使用'let dx = ...'而不是'let dx:f64 = ...')。 – jkiiski
@ user3419211嗯,它沒有。你可以寫'impl Line {...}'。但問題是,函數_that_泛型(實際上不依賴於類型「T」)可能是多麼有用。它們可以是,但顯然不是在你的特定情況下,因爲你至少需要知道''T'來執行計算。 –
kirelagin