やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Rust自習(じゃんけんゲーム5)

 HandfromメソッドをFromトレイトにした。

成果物

参考

コード

fn main() {
    loop {
        // ...
//        let player = Hand::Rock.from(player);
        let player = Hand::from(player);
        // ...
    }
}
impl From<u32> for Hand {
    fn from(hand: u32) -> Hand {
        match hand {
            1 => Hand::Rock,
            2 => Hand::Scissors,
            3 => Hand::Paper,
            _ => panic!("手は1〜3のいずれかで指定してください。")
        }
    }
}
impl Hand {
    /*
    fn from(&self, hand: u32) -> Hand {
        match hand {
            1 => Hand::Rock,
            2 => Hand::Scissors,
            3 => Hand::Paper,
            _ => panic!("手は1〜3のいずれかで指定してください。")
        }
    }
    */
    fn random(&self) -> Hand {
        // ...
//        self.from(hand)
        Hand::from(hand)
    }

 コメントアウトの部分を変更した。fromメソッドをFromトレイトのfromメソッドに変更した。

所感

 enumimplfn(&self)のように第一引数をselfにするとEnum::Member.fn()selfなしだとEnum::fn()になるらしい。

 こんな基礎すら知らなかった。The Bookに書いてあったっけ?

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux

前回まで