2016-08-27 22 views
3

は、ビットフラグの典型的なチェックを取る:Rustのフラグ/ビットマスクとのマッチング方法は?

if  (v & (1 << 0)) != 0 { foo(); } 
else if (v & (1 << 1)) != 0 { bar(); } 
else if (v & (1 << 2)) != 0 { baz(); } 

これはmatch文として書かれるだろうか?

+0

あなたが – Dogbert

+0

@Dogbertを 'もしV&(1 << 0) > 0 'などをもしかして、はい、私は考えていない – ideasman42

+0

を更新しました? – starblue

答えて

8
if  (v & (1 << 0)) != 0 { foo(); } 
else if (v & (1 << 1)) != 0 { bar(); } 
else if (v & (1 << 2)) != 0 { baz(); } 

このような具体的なコードは次のように書き換えることができます。

match v.trailing_zeros() { 
    0 => foo(), 
    1 => bar(), 
    2 => baz(), 
    _ => {}, 
} 
+1

これは本当に巧妙です!私は、これが本当に正しいことを確認するためのいくつかのテストを書いています(そして、それらが通過します):https://play.rust-lang.org/? gist = bcbd5fb07635e0601747abf06b8d3f57&version = stable&backtrace = 0 – Dogbert

関連する問題