Rust中的多行整数文字

Mor*_*hne 4 rust

我有以下整数文字:

let centre: u64 = 0b00000000_00000000_00111100_00111100_00111100_00111100_00000000_00000000;
Run Code Online (Sandbox Code Playgroud)

它代表了一个国际象棋棋盘,所以我认为将它格式化得更好,类似于:

let centre: u64 = 0b
                  00000000
                  00000000
                  00111100
                  00111100
                  00111100
                  00111100
                  00000000
                  00000000;
Run Code Online (Sandbox Code Playgroud)

但是,上面的示例不会编译,因为换行符被解释为我的文字中的空格.有没有办法实现这个目标?

Fra*_*gné 5

##使用标准库中的宏(从Rust 1.22开始),无法将令牌连接到新令牌(就像在C预处理器中那样).

但是,我想出了以下宏.它0b_在每一行重复,但至少你可以清楚地看到零和一的模式.在编译时评估移位和OR,因此与普通文字相比,此解决方案没有运行时损失.

macro_rules! chessboard {
    ($line0:tt $line1:tt $line2:tt $line3:tt $line4:tt $line5:tt $line6:tt $line7:tt) => {
        ($line0 << 56) |
        ($line1 << 48) |
        ($line2 << 40) |
        ($line3 << 32) |
        ($line4 << 24) |
        ($line5 << 16) |
        ($line6 <<  8) |
        ($line7 <<  0)
    }
}

fn main() {
    let centre: u64 = chessboard!(
        0b_00000000
        0b_00000000
        0b_00111100
        0b_00111100
        0b_00111100
        0b_00111100
        0b_00000000
        0b_00000000);
    println!("{:#b}", centre);
}
Run Code Online (Sandbox Code Playgroud)