2014-07-23 30 views
0

我想寫捕獲與sweet.js函數調用的表達和參數的規則。捕獲一個函數調用的參數與sweet.js

這是我目前的宏觀(即不匹配):

macro foo { 
    rule { 
     ($fn:expr ($args ...)) 
    } => { 
     $fn("stuff", $args ...) // pushes "stuff" to the beginning of the arguments 
    } 
} 

而一些投入和預期產出:

foo(somefn("bar")) 

應該輸出:

somefn("stuff", "bar") 

foo(console.log("bar")) 

應該輸出:

console.log("stuff", "bar") 

任何援助將不勝感激。

回答

2

:expr模式類是貪婪的所以$fn:expr匹配全部somefn("bar")(因爲這是一個完整的表達式)。

在這種情況下,可能是最簡單的解決方法是使用省略號:

macro foo { 
    rule { 
     ($fn ... ($args ...)) 
    } => { 
     $fn ... ("stuff", $args ...) // pushes "stuff" to the beginning of the arguments 
    } 
} 
+0

謝謝。這正是我所期待的。 – SimpleJ

相關問題