Я пытаюсь написать макрос 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 );
Откуда берутся эти лишние скобки и как от них избавиться? Должен ли я использовать правила регистра и #{}
? Я пробовал перестановки этого, но все еще не мог сгенерировать вызов метода без лишних скобок.
expr
было технически неправильным. Я использую это, чтобы эмулировать заполнители Scala. 14.06.2014