Javascript 在sweetjs中实现多行瘦箭头语法

Javascript 在sweetjs中实现多行瘦箭头语法,javascript,preprocessor,sweet.js,Javascript,Preprocessor,Sweet.js,我在和sweetjs玩,我一辈子都不明白为什么不匹配 代码: 导致 SyntaxError: [macro] Macro `-` could not be matched with `> {} ; expect ()...` 10: var fn = () -> { ^ 请尝试删除闭包最后一行的分号,因为某些原因,sweetjs编译器在使用$last和分号时遇到问题 macro -> { rule infix { () | { $body .

我在和sweetjs玩,我一辈子都不明白为什么不匹配

代码:

导致

SyntaxError: [macro] Macro `-` could not be matched with `> {} ; expect ()...`
10: var fn = () -> {
                ^

请尝试删除闭包最后一行的分号,因为某些原因,sweetjs编译器在使用$last和分号时遇到问题

macro -> {
 rule infix { () | { $body ... $last:expr } } => {
    function() {
      $($body) ...
      return $last
    }
  }
}

var fn = () -> {
  var a = 1
  a + 2
};

编译器在$last和
方面出现问题的原因
是因为
不是表达式的一部分。因此,模式将匹配到
a+2
,但仍将保留一个令牌。您可以通过使用两个规则来处理此问题,其中一个规则在不使用
的情况下匹配在末尾,一个带有
macro -> {
 rule infix { () | { $body ... $last:expr } } => {
    function() {
      $($body) ...
      return $last
    }
  }
}

var fn = () -> {
  var a = 1
  a + 2
};