我正在尝试编写一个sweet.js
需要生成方法调用语法的宏obj.method()
,但是method
作为文字表达式传递给宏。例如:
mcall(obj, toString().length);
// becomes
obj.toString().length;
我有一些接近的东西:
macro mcall {
rule { ($o, $m:expr) } => { $o.$m }
}
mcall(obj, toString().length);
但是,这显然扩展为:
obj . ( toString ( ) . length );
这些额外的括号是从哪里来的,我该如何摆脱它们?我应该使用案例规则#{}
吗?我尝试了它的排列,但仍然无法在没有额外括号的情况下成功生成方法调用。