2015-02-24 74 views
0

比方說,我有這兩個宏這是除宏名稱相同:Sweet.js中的宏是幹什麼的?

macro h1 { 
    case {$name ($x (,) ...)} => { 
    letstx $nameVal = [makeValue(unwrapSyntax(#{$name}), null)] 
    return #{React.createElement($nameVal, $x (,) ...)} 
    } 
} 

macro h2 { 
    case {$name ($x (,) ...)} => { 
    letstx $nameVal = [makeValue(unwrapSyntax(#{$name}), null)] 
    return #{React.createElement($nameVal, $x (,) ...)} 
    } 
} 

什麼是我在這裏的代碼重用的選擇嗎?我可以有一個宏生成一個宏嗎?

或可我最小放置主體部分(與letstx...開始)在它自己的「內部」宏?:

回答

1

如何像:

macro make_header { 
    case {_ $name ($x (,) ...)} => { 
    letstx $nameVal = [makeValue(unwrapSyntax(#{$name}), null)] 
    return #{React.createElement($nameVal, $x (,) ...)} 
    } 
} 

macro h1 { 
    rule { ($x (,) ...) } => { 
    make_header h1 ($x (,) ...) 
    } 
} 
macro h2 { 
    rule { ($x (,) ...) } => { 
    make_header h2 ($x (,) ...) 
    } 
} 

h1 (1, 2, 3) 
h2 (1, 2, 3) 
+0

的作品添,沒有幹成我想,但肯定可以接受。你能想到任何巫術來克隆一個宏嗎?導致肯定「cloneMyMacro(h1); cloneMyMacro(h2);」會更好... – 2015-02-28 22:39:02