2016-06-02 14 views
-1

我々はここでthis code:Rustのイニシャライザリストの別の値で値を初期化する方法は?例えば

use std::rc::Rc; 

struct B; 

struct A { 
    obj: Rc<B>, 
} 
impl A { 
    fn new(obj: Rc<B>) -> A { 
     A { 
      obj: obj, 
     } 
    } 
} 
struct C { 
    b: Rc<B>, 
    a: A, 
} 
impl C { 
    fn new() -> C { 
     C { 
      b: Rc::new(B), 
      a: A::new(b.clone()), 
     } 
    } 
} 

fn main() { 

} 

がかかることがあり、私は同じ初期化子リスト内の別の値で初期化したいa呼ばA構造体のメンバです。私はそれはので、私は通常、それを行うにはOption<T>を使用可能ではないと思います。

use std::rc::Rc; 

struct B; 

struct A { 
    obj: Rc<B>, 
} 
impl A { 
    fn new(obj: Rc<B>) -> A { 
     A { 
      obj: obj, 
     } 
    } 
} 
struct C { 
    b: Rc<B>, 
    a: Option<A>, 
} 
impl C { 
    fn new() -> C { 
     let mut c = C { 
      b: Rc::new(B), 
      a: None, 
     }; 
     c.a = Some(A::new(c.b.clone())); 
     c 
    } 
} 

fn main() { 

} 

しかし、私はここに役に立たない余分な作業を行うと、後で私は常にこのオプションをアンラップする必要があるので、私の意見では、これは愚かです。これをもっと簡単にする方法はありますか?

答えて

2

最初に値を作成するのはどうですか?

impl C { 
    fn new() -> C { 
     let tmp = Rc::new(B); 
     C { 
      b: tmp.clone(), 
      a: A::new(tmp), 
     } 
    } 
} 
+0

ハハ、あなたは私の一日を作った。なぜ私はそれを以前にやったのか分からない。 –

関連する問題