2016-12-28 8 views
9

私は、可変ベクトルをRustの不変ベクトルに変換しようとしています。私はこれが働くだろうと思ったが、それはしていません:錆の変更可能なリファレンスを不変にするには?

let data = &mut vec![]; 
let x = data;   // I thought x would now be an immutable reference 

私は不変の結合に可変の参照を有効にするにはどうすればよいですか?

答えて

8

逆参照再度参照値:あなたのコードが何をしていたかについては

fn main() { 
    let data = &mut vec![1, 2, 3]; 
    let x = &*data; 
} 

を、あなたはおそらくWhat's the difference in `mut` before a variable name and after the `:`?をお読みください。変数dataは既に不変ですが、変更可能な参照が含まれています。 dataを再割り当てすることはできませんが、ポイント先の値を変更することはできます。

どのように変更可能な参照を不変バインディングにすることができますか?

あなたはdataが何であるかを変更することはできませんように、それはすでに不変結合です。

+0

このコードは 'Vec 'を返す関数内にあります。 '&* data'を返すと、' expected struct 'std :: vec :: Vec'、見つかった参照 'というエラーが出ます。 '* data * 'を返すと' '借用したコンテンツから移動できない'というエラーが出ます。それは借りチェッカーについて他に何かありますか?私はこれを解決した方法は 'data.clone()'を返すことですが、私はそれをより実行可能にしようとしていましたが、関数内でベクトルを作成しているので、たぶん私の質問に間違いがあったかもしれませんが、 'data'から' Vec 'を得るにはどうすればいいですか? – jbrown

+0

@jbrownあなたが 'let mut data = vec![1、2、3];と言っているように聞こえます。データを返す; '。 – Shepmaster

+0

はい、それは私が探していたものです。ありがとう。私は変更についての錆の文書を再読するつもりです – jbrown

関連する問題