3
は、ビットフラグの典型的なチェックを取る:Rustのフラグ/ビットマスクとのマッチング方法は?
if (v & (1 << 0)) != 0 { foo(); }
else if (v & (1 << 1)) != 0 { bar(); }
else if (v & (1 << 2)) != 0 { baz(); }
これはmatch
文として書かれるだろうか?
は、ビットフラグの典型的なチェックを取る:Rustのフラグ/ビットマスクとのマッチング方法は?
if (v & (1 << 0)) != 0 { foo(); }
else if (v & (1 << 1)) != 0 { bar(); }
else if (v & (1 << 2)) != 0 { baz(); }
これはmatch
文として書かれるだろうか?
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(),
_ => {},
}
これは本当に巧妙です!私は、これが本当に正しいことを確認するためのいくつかのテストを書いています(そして、それらが通過します):https://play.rust-lang.org/? gist = bcbd5fb07635e0601747abf06b8d3f57&version = stable&backtrace = 0 – Dogbert
あなたが – Dogbert
@Dogbertを 'もしV&(1 << 0) > 0 'などをもしかして、はい、私は考えていない – ideasman42
を更新しました? – starblue