Rust

Option<T>を拡張して xor()を追加する

rust 1.22.1 時点での話。

コメントを頂いてできることがわかったのでバチッと書き換えました!(コメント1コメント2

書き換え前の記事はこちら

こうする

trait Xor {
    fn xor(self, other: Self) -> Self;
}

impl<T> Xor for Option<T> {
    #[inline]
    fn xor(self, optb: Option<T>) -> Option<T> {
        match (self, optb) {
            (Some(v), None) => Some(v),
            (None, Some(v)) => Some(v),
            _ => None,
        }
    }
}

fn main() {
    let (some, none): (Option<u32>, Option<u32>) = (Some(1), None); 
    assert_eq!(some.xor(none), Some(1)); 
}

@JunSuzukiJapan, @tatsuya6502
本当にありがとうございます!