Sweet.js - 如何将变量放入标识符名称和字符串变量?

时间:2014-08-09 00:42:48

标签: javascript macros sweet.js

我是Sweet.js的新手。我的第一个简单宏是以下

macro test {
  rule {
    $className($entityName)
  } => {
    function test$className()
    {
      console.print("$className");
      console.print("$entityName");
    }
  }
}

test me(More)

产生

function test$className() {
    console.print(me);
    console.print(More);
}

但是我希望能够产生这个:

function testMe() {
    console.print("me");
    console.print("More");
}

但我尝试过的任何变种都没有奏效。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

您需要使用案例宏来构建所需的确切令牌:

macro test {
    case {_
        $className($entityName)
    } => {
        var classStr = unwrapSyntax(#{$className}[0]);
        var entityStr = unwrapSyntax(#{$entityName}[0]);
        letstx $fnName = [makeIdent("test" + classStr, #{here})];
        letstx $classStr = [makeValue(classStr, #{here})];
        letstx $entityStr = [makeValue(entityStr, #{here})];
        return #{
            function $fnName()
            {
                console.print($classStr);
                console.print($entityStr);
            }
        }
    }
}

test me(More)