4

Rust で内包表記のために Scala のようなものを実装するマクロを作成しました。これは次のようになります。

map_for!{
    x <- 0..4;
    y = 2*x;
    z <- 0..1;
    => y+z
}

これに:

((0..4).map (move |x| { let y = 2 * x; (x, y) }))
    .flat_map (move |params| {
        let (x, y) = params;
        (0..1).map (move |z| { y + z })
    })

これは機能しますが、コンパイラは「未使用の変数」警告を発行xしますflat_map。マクロのステートメントの#[allow(unused_variables)]前に追加することで警告を無効にすることができますが、未使用の変数警告がすべて削除されるため、次のようになります。let

map_for!{
    x <- 0..4;
    y = 2;
    z <- 0..1;
    => y+z
}

次のように展開されます:

((0..4).map (move |x| { let y = 2; (x, y) }))
    .flat_map (move |params| {
        #[allow(unused_variables)]
        let (x, y) = params;
        (0..1).map (move |z| { y + z })
    })

実際には使用されていませんが、警告も生成さxれません。

最初の例では警告が生成されないようにする方法はありますが、2 番目の例では生成されますか?

警告が抑制された完全なコードと同様に、警告のあるマクロの完全なコードが利用可能です。

4

1 に答える 1