1

何らかの操作を行った後、変更可能な参照を返そうとしています。これは、次のコードで最もよく説明されています。

#[derive(PartialEq)]
pub enum Value {
    Null,
    Array(Vec<Value>),
}

impl Value {
    pub fn new() -> Value {
        Value::Array(Vec::new())
    }

    pub fn push<'a, T> (&'a mut self, value: T) -> Option<&'a mut Value>
    where T:Into<Value> {
        let temp = match *self {
            Value::Array(ref mut vec) => {
                vec.push(value.into());
                true
            },
            _ => false,
        };
        if temp {
            Some(self)
        } else {
            None
        }
    }
}

#[test]
fn push_test() {
    let mut val = Value::new();
    val.push(Value::Null);
    assert!(val == Value::Array(vec![Value::Null]));
}

プレイ版はこちら。ブール値の回避策は、ブロックSome(self)内から戻ると複数回借用することになるためです。ブール値を使用せずに関数matchを実装するエレガントな方法はありますか? push関数の署名を保持することが可能であれば、それはボーナスです。ありがとうございました!

4

1 に答える 1