2016-08-05 63 views
0

在C它可以編寫聲明變量宏,如下所示:在Rust中聲明變量的宏?

#define VARS(a, b, c) \ 
    int a, b, c; 

當然,這是不是你通常會想要做的事。

在實際的例子中,我期待着它的工作不那麼簡單。

#define VARS(data, stride, a, b, c) \ 
    MyStruct *a = &data.array[0],   \ 
    MyStruct *b = &data.array[1 * (stride)], \ 
    MyStruct *c = &data.array[2 * (stride)]; 

但是,對於這個問題的目的,轉讓的具體細節應該無關緊要。

是否有可能在Rust中寫入這樣的宏? 如果是這樣如何寫?

回答

1

有可能在鏽寫這樣一個宏:

macro_rules! vars { 
    ($data:expr, $stride:expr, $var1:ident, $var2:ident, $var3:ident) => { 
     let $var1 = $data[0]; 
     let $var2 = $data[1 * $stride]; 
     let $var3 = $data[2 * $stride]; 
    }; 
} 

fn main() { 
    let array = [1, 2, 3, 4, 5]; 
    let stride = 2; 
    vars!(array, stride, a, b, c); 
    println!("{}", a); 
    println!("{}", b); 
    println!("{}", c); 
} 

閱讀Macros chapter in the book以獲取更多信息。