【问题标题】:Implement multiline skinny arrow syntax in sweetjs在 sweetjs 中实现多行细箭头语法
【发布时间】:2014-02-03 02:08:20
【问题描述】:

我在玩 sweetjs,我这辈子都不知道为什么 this rule for parameterless multiline skinny arrow syntax 不匹配

代码:

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

var fn = () -> {
  var a = 1;
  a + 2;
};
expect(fn()).to.equal(3);

结果

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

【问题讨论】:

    标签: javascript preprocessor sweet.js


    【解决方案1】:

    尝试删除闭包最后一行的分号,由于某种原因,sweetjs 编译器在 $last 和分号方面存在问题。

    macro -> {
     rule infix { () | { $body ... $last:expr } } => {
        function() {
          $($body) ...
          return $last
        }
      }
    }
    
    var fn = () -> {
      var a = 1
      a + 2
    };
    

    【讨论】:

    • 编译器遇到 $last 和 ; 问题的原因是因为 ; 不是表达式的一部分。所以该模式将匹配到a + 2,但仍然会留下一个令牌。您可以通过设置两条规则来处理此问题,一条匹配末尾没有;,另一条匹配;
    猜你喜欢
    • 2020-07-31
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2023-02-22
    • 2020-06-22
    • 2018-06-08
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多