2010-08-31 51 views
1

我在Groovy中實現了一些現有文件格式的DSL。 在這種格式我們有像Groovy DSL:處理標籤


group basic_test { 
    test vplan_testing { 
     dir: global_storage; 
    }; 
}; 

構建在這裏,我有這個dir: global_storage問題 - 常規認爲「導演:」作爲一個標籤,所以我不能處理它。

你有一個想法,我怎麼可以接收一些回調(getProperty,invokeMissingMethod)這個構造?

謝謝!

回答

2

我不相信你可以這樣做,你需要改變你的dsl以便能夠捕獲這些信息。這裏是你如何能做到這一點:

class Foo { 
    static plan = { 
     vplan_testing { 
      dir 'global_storage' 
     } 
    } 
} 

def closure = Foo.plan 
closure.delegate = this 
closure() 

def methodMissing(String name, Object args) { 
    println "$name $args"  
    if(args[0] instanceof Closure) 
     args[0].call() 
} 

輸出將是

DIR [global_storage]

,或者你可以定義你的DSL這種方式:

class Foo { 
    static plan = { 
     vplan_testing { 
      test dir:'global_storage' 
     } 
    } 
} 

替換「測試「的東西有意義的域名。在這種情況下,輸出將

測試[導演:global_storage]

希望這有助於

-Ken

+0

謝謝。我希望我可以使用Groovy DSL作爲現有格式的解析器,而無需進行任何更改 – 2010-09-01 06:10:55