0

假设我有这两个宏,除了宏名之外是相同的:

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...)放在它自己的“内部”宏中吗?:

4

1 回答 1

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)
于 2015-02-26T21:57:54.607 回答