Slide 8
Slide 8 text
force: Ԇ͞ΕͨࣜΛධՁ
1 impl<'a, T: 'a> Delayed<'a, T> {
2 pub fn force(&self) {
3 // ͜͜Ͱ mut ʹ͠ͳ͍ͱαϯΫ͕ߋ৽Ͱ͖ͳ͍ͷͰɼ
4 // RefCell ͰแΉ
5 let mut thunk = &mut *self.thunk.borrow_mut();
6 let val = match **thunk {
7 // ະධՁͳΒอ͍࣋ͯͨ͠ΫϩʔδϟΛ࣮ߦ͠ɼ
8 // ܭࢉΛ࣮ߦ͢Δɽ
9 NotYet(ref invoke) => {
10 Box::new(Memo(invoke()))
11 },
12 // ͢ͰʹܭࢉࡁΈͳΒԿ͠ͳ͍
13 Memo(_) => return,
14 };
15 // ܭࢉͨ͠Λ͓࣋ͬͯ͘
16 *thunk = val;
17 }
18 }
ιʔεɿ https://goo.gl/qMGuZQ