假设我有两个宏,除宏名称外是相同的:
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...
开头)最小化放置在自己的“内部”宏中吗?:
答案 0 :(得分: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)