LINUX.ORG.RU

История изменений

Исправление Virtuos86, (текущая версия) :

Мне показалось, что можно поправить версию pftBest, и я был прав: https://play.rust-lang.org/?gist=43a660c4e28fd50e40f91eab0f3cbcea&version...

macro_rules! apply {
    ($func:ident $(, $x:expr )* ; $( $y:ident ),* ) => (
        |$($y),*| {
            $func($($x,)* $($y,)*)
        }
    )
}

fn sum(a: u32, b: u32, c: u32) -> u32 {
    a + b + c
}

fn main() {
    let foo = apply!(sum, 30 ; a, b);
    let ans = foo(10, 2);
    println!("Answer: {}", ans);
    
    let bar = apply!(sum, 30, 7 ; b);
    let ans = bar(6);
    println!("Answer: {}", ans);
    
    let bazz = apply!(sum ; a, b, c);
    let ans = bazz(1, 2, 6);
    println!("Answer: {}", ans);
}

Исходная версия Virtuos86, :

Мне показалось, что можно поправить версию pftBest, и я был прав: https://play.rust-lang.org/?gist=43a660c4e28fd50e40f91eab0f3cbcea&version...

macro_rules! apply {
    ($func:ident $(, $x:expr )* ; $( $y:ident ),* ) => (
        |$($y),*| {
            $func($($x,)* $($y),*)
        }
    )
}

fn sum(a: u32, b: u32, c: u32) -> u32 {
    a + b + c
}

fn main() {
    let foo = apply!(sum, 30 ; a, b);
    let ans = foo(10, 2);
    println!("Answer: {}", ans);
    
    let bar = apply!(sum, 30, 7 ; b);
    let ans = bar(6);
    println!("Answer: {}", ans);
    
    let bazz = apply!(sum ; a, b, c);
    let ans = bazz(1, 2, 6);
    println!("Answer: {}", ans);
}