Каковы некоторые методы для сушки макросов в 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)
Другие вопросы по тегам