2015-02-24 71 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