SHARE
TWEET

Untitled

a guest Mar 20th, 2017 55 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #![allow(unused_assignments)]
  2. #![allow(unused_variables)]
  3. #![allow(unused_mut)]
  4. #![allow(dead_code)]
  5.  
  6. fn main() {
  7.   {
  8.     let mut a = 0;
  9.     let mut ref_a = &mut a;
  10.     // mutable な貸出の時(貸出先のオブジェクト)
  11.     // - 読み取り OK
  12.     // *ref_a;
  13.     // - 書き込み OK
  14.     // *ref_a = 5;
  15.     // - mutable貸与 OK
  16.     // let b = &mut *ref_a;
  17.     // - immutable貸与 NG
  18.     // let c = &*ref_a;
  19.     // - 所有権の移動 OK
  20.     // let d = ref_a;
  21.   }
  22.   {
  23.     let mut a = 0;
  24.     let mut ref_a = &mut a;
  25.     // mutable な貸出の時(貸出元のオブジェクト)
  26.     // - 読み取り NG
  27.     // a;
  28.     // - 書き込み NG
  29.     // a = 5;
  30.     // - mutable貸与 NG
  31.     // let b = &mut a;
  32.     // - immutable貸与 NG
  33.     // let c = &a;
  34.     // - 所有権の移動 NG
  35.     // let d = a;
  36.   }
  37.   {
  38.     let a = 0;
  39.     let ref_a = &a;
  40.     // immutable な貸出の時(貸出先のオブジェクト)
  41.     // - 読み取り OK
  42.     // *ref_a;
  43.     // - 書き込み NG
  44.     // *ref_a = 5;
  45.     // - mutable貸与 NG
  46.     // let b = &mut *ref_a;
  47.     // - immutable貸与 OK
  48.     // let b = &*ref_a;
  49.     // - 所有権の移動 OK
  50.     // let b = ref_a;    
  51.   }
  52.   {
  53.     let a = 0;
  54.     let ref_a = &a;
  55.     // immutable な貸出の時(貸出元のオブジェクト)
  56.     // - 読み取り OK
  57.     // a;
  58.     // - 書き込み NG
  59.     // a = 5;
  60.     // - mutable貸与 NG
  61.     // let b = &mut a;
  62.     // - immutable貸与 OK
  63.     // let b = &a;
  64.     // - 所有権の移動 OK
  65.     // let c = a;
  66.   }
  67.   {
  68.     // 明示的な所有権の移動は出来ない (なぜなら a は b にオブジェクトを貸与中のため)
  69.     let mut a = 100;
  70.     {
  71.       let b = &mut a;
  72.       let c = 5;
  73.       // a = b;
  74.       //   error[E0506]: cannot assign to `a` because it is borrowed
  75.       // a = c;
  76.       //   error[E0506]: cannot assign to `a` because it is borrowed
  77.     }
  78.     a = 200;  // OK
  79.   }
  80. }
RAW Paste Data
Top