3
複製通用的數學我想寫一些通用的數學函數,沒有假設,我的類型是可複製。這似乎是不可能的,因爲數學運算符會消耗這些值,而不是借用它們。所以需要複製對象,僅用於簡單的數學運算。我也可以將它們移動,但是當我想要改變一個結構時,這在借用的上下文中是不可能的,而這是我需要的。沒有生鏽
這裏是一些簡單的例子,在那裏有問題:
use std::ops::Add;
struct NoCopy<T>(T); //some non-copyable struct, (maybe a vector)
struct Cont<T>(NoCopy<T>); //some struct contaioning a noncopyable struct
impl<T: Add<Output=T>> Add for NoCopy<T> {
type Output = NoCopy<T>;
fn add(self, x: NoCopy<T>) -> NoCopy<T> {
NoCopy(self.0+x.0)
}
}
fn main() {
let x = NoCopy(1);
let cont = Cont(x);
let rel = NoCopy(2);
cont.0=cont.0+rel; //addition makes struct cont invalid, so i have to copy
}
當我剛要計算的東西與結構的不可拷貝的對象(例如向量的長度),也不會工作,因爲該值將要麼被消耗掉,所以結構變得無效,或借檢查說「不能搬出借來的語境」。 變異結構時,我將如何正確使用一個通用的數學,? 僅可複製類型(或顯式克隆)?
我不能完全肯定的問題,但我的第一個想到的是,'Cont'本身不具有添加操作 - 只有'NoCopy'對象 - 甚至認爲'Cont'是您要添加到'NoCopy'什麼?另一種選擇可能是讓'cont'變爲可變的並且有'cont = Cont(cont.0 + rel)'? –
這只是一個例子。實際上,這種方式可能會有問題,因爲我的結構中有很多字段,並且也想在借用的上下文中使用它 – porky11