静的変数、スタック変数とスタック変数:#保管場所として変数に分割することができます。
#静的変数は、安全でない方法の変更を行うためのパブことができます。
#スタック変数を直接変更、または変数参照によって修飾、または、スタック変数を変更するように形質転換されてもよいです。例えば下記Vecと関連する操作は、I32及び他のプリミティブデータ型に変更してもよいし、次いで、スタック動作変数に変換します。
#ヒープの変数は、任意のタイプのものとすることができる;コールスタックを変更し、それをスレッドにする方法?
1.直接変更は、当然のことながら、可変MUTキーワードを変更することができています。
{主FN()
年間でMUT =より[]!;
v.push(1)。
println!( "ここのベクター:{:}?"、&V)。//ここでのベクトル:[1]
}
2.リファレンスは、変数によって変更しました
{主FN()
年間でMUT =より[]!;
//&MUT V、代わりに参照されたオブジェクトが修正されてもよいが;&V変更しない; MUT V_REFは、元のオブジェクトがV_REFによって修飾されてもよい表します。元のオブジェクトが不変であれば、それ&MUT Vコンパイルパス。
MUT V_REF =&MUT Vましょう。
//のprintln(「ここのベクター:{:}?」、&V); //コンパイル文無効、不変変数参照と参照は、競合の原因、積層の範囲を引用しました!
v_ref.push(1)。
println!( "ここのベクター:{:}?"、&V)。//ここでのベクトル:[1]
}
スマートポインタを通じて3.アクセス
{主FN()
そして危険{//v_ref.as_mut v_ref.as_ref安全でないコードを使用します。
MUT V = VEC []をしましょう! 。
MUT =ボックス:: V_REFのlet into_raw_non_null(ボックスV);
//のprintln( "ここベクタです:{:}?"、&V); / Vもはや有効、所有権がA非NULL <Vecと<I32>となっboxv_refに移しました! >
。v_ref.as_mut()プッシュ(1) ; // Vecと<I32>、修正に変身へのポインタ
//のprintln( "ここのベクトル: {:}?"、&V); // vは無効化されている、所有権の移転があります!
!のprintln( "ここのベクトル: {:}?"、v_ref.as_ref()); //ここでのベクトル:[1]
}}
閉鎖によって改変4は、クロージャは、隠されたと明示的なパラメータの操作を渡すことができます
{主FN()
VEC = V MUT LET [] ;!
せMUTハンドラ= {||
v.push(1); // MUT V&着信変数
};
ハンドラを();
println( "ここのベクトル:{:}?"、&V);!//ここでのベクトル:[1]
}
修正変数5.マルチスレッド
使用ははstd ::スレッドを。
使用のstd ::同期:: {アーク、MPSC}。
{主FN()
MUT =で年より、[1、2、3]!;
println!( "ここのベクター:{:}?"、&V)。
てみましょう(TX、RX)= MPSC ::チャネル();
スレッド::スポーン(移動|| {
v.push(4);
tx.send(V);
});
)(and_v = rx.recvてみましょう。
試合and_v {
OK(T)=> {printlnを!( "ここでのRECEベクトル:{:}?"、T);}、
のErr(_)=> {}
}
}
出力:
ここでのベクトル:[1、2、3]
ここでのRECEベクトル[1、2、3、4]
6. RefCell内部変数を変更するために、Rcは唯一の変数の数を参照することができ、かつ、Rc ::強いは、可変電流引用を得るために、一緒に参照変数の値を変更します
使用ははstd ::電池:: RefCell。
使用ははstd :: RC :: Rcは、
{主FN()
MUT V = Rcは::新しい(!RefCell ::新(VEC [1、2、3]))しましょう。
MUTセル= Rcは::クローン(&MUT V)をしましょう。
println( "ここのベクトル:{:}?"、&V);!
cell.borrow_mut()プッシュ(4)。
println( "ここのベクトル:{:}?"、&V);!
v.borrow_mut()プッシュ(5)。
!のprintln( "ここのベクトル:{:}?"、&セル)。
}
出力:
ここでのベクター:RefCell {値:[1、2、3]}
ここでのベクター:RefCell {値:[1、2、3、4]}
ここでのベクター:RefCell {値:[1、2、3、4、5] }
こうして文字列変数の複数の使用が借り用いて挿入することができ、およびR cの管理を統一するようによる積層するようにコンパイラ不変参照変数の参照範囲を気にしません