2015-02-24 3 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);" было бы еще лучше ... –

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