2016-08-05 2 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 для получения дополнительной информации.

Смежные вопросы