我是 Rust 的新手,并嘗試實作 Rectangle 泛型型別。下面的代碼給出了編譯錯誤“移動發生是因為self.w有型別T,它沒有實作Copy特征”。我該如何解決這個問題,有沒有更好的方法來做到這一點?
struct Rectangle <T>{
w : T,
h : T
}
impl<T:std::ops::Mul std::ops::MulAssign std::ops::Mul<Output = T>> Rectangle<T>{
fn get_area(&self) -> T{
return self.w * self.h;
}
fn scale(&mut self, scale:T) {
self.w *= scale;
self.h *= scale;
}
fn new(w:T, h:T) -> Rectangle<T> {
return Rectangle{
w:w,
h:h
};
}
}
fn main() {
let rect = Rectangle::new(1.2, 3.4);
let area = rect.get_area();
println!("Rectangle Area {area}");
}
uj5u.com熱心網友回復:
您的問題是您需要添加 Copy到您希望 T 實作的特征串列中:
impl <T: ... Copy> Rectangle {
^^^^^^
但是我發現跟蹤數字型別的那些長特征是很痛苦的,所以我通常會引入一個傘形特征。在您的情況下,它看起來像:
trait Field: std::ops::Mul std::ops::MulAssign std::ops::Mul<Output = Self> Copy {}
impl <T:std::ops::Mul std::ops::MulAssign std::ops::Mul<Output = Self> Copy> Field for T {}
然后你可以寫:
impl <T:Field> Rectangle {
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510438.html
標籤:仿制药锈
上一篇:有沒有辦法在飛鏢中拋出泛型
