Advertisement
Guest User

Untitled

a guest
Mar 20th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement