[英]How to return the value of a reference field of a struct that is no longer used without copy?
像這樣的代碼:
pub fn sample_from_categorical_logits(prob_logits: Tensor) -> (Tensor, Tensor) {
let prob_obj = match prob_logits.size().len() {
3 => Categorical::from_logits(prob_logits),
2 => Categorical::from_logits(prob_logits.unsqueeze(1)),
_ => panic!("illegal..."),
};
(prob_obj.sample(&[]), (*prob_obj.probs()).copy())//TODO: can copy be avoided?
}
我可以通過prob_obj.prob()
獲得對象prob_obj
字段的不可變引用。 現在我需要返回它的值,因為我需要讀取(僅)這個值進行一些計算,並進一步返回這個值和計算值。
Tensor
是第三個結構,不實現Copy
特征。
我知道我不能返回本地對象的引用。 但在這種情況下,由於我不再需要整個prob_obj
對象,我想知道除了復制字段之外是否還有更有效的方法,比如在 C++ 中move
。
我用谷歌搜索,發現像Cow
、 Mem::take
和UnSafe
的東西,但它們似乎不是這里的用例。
我想知道除了復制字段之外是否還有更有效的方法,比如在 C++ 中移動。
嗯,是的,搬家。 但是移動需要擁有對象的所有權,這意味着您需要一個probs()
版本,它消耗對象以返回其位。
或者返回一個可變引用以使用mem::take
或mem::swap
。
就像你在 C++ 中所做的那樣,真的,你不能只是將東西從 const 引用中移出(充其量只是執行復制)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.