導入#
最近、多くのユーザーが何さんの誤ったコードに対して興味深い二次創作を行い、それが一時的に Github のトレンドに登りました:
その中で、C++ のマクロを使用して何さんの「論理和演算子」を実装した人がいましたので、それに触発されて Rust のマクロを使用して実装してみました。
ソースコード#
fn parse_to_vec(nums: &str) -> Vec<usize> {
let nums = nums.replace(' ', "");
nums.split('|').map(|x| x.parse().unwrap()).collect()
}
fn power_con(powers: &mut [u8], nums: &[usize], power: u8) {
for &num in nums {
powers[num] = power;
}
}
#[macro_export]
macro_rules! powerCon {
($powers: expr, $nums: expr, $force: expr) => {
power_con($powers, &parse_to_vec(stringify!($nums)), $force)
};
}
fn main() {
let mut powers = [0_u8; 68];
powerCon!(&mut powers, 0, 100);
powerCon!(&mut powers, 1 | 2 | 6 | 7 | 11 | 52 | 57 | 58 | 65, 10);
println!("{:?}", powers)
}