Groovy DSL:处理标签

Groovy DSL:处理标签,groovy,dsl,Groovy,Dsl,我正在Groovy中为一些现有的文件格式实现一个DSL。 在这种格式中,我们有一个类似 group basic_test { test vplan_testing { dir: global_storage; }; }; 这里我对这个dir:global_storage-groovy将“dir:”视为一个标签,所以我无法处理它 你知道我如何接收这个构造的回调(getProperty,invokeMissingMethod)吗 谢谢大家! 我不相信您可以通过这种

我正在Groovy中为一些现有的文件格式实现一个DSL。 在这种格式中,我们有一个类似


group basic_test {
   test vplan_testing  {
         dir: global_storage;
   };
};
这里我对这个
dir:global_storage
-groovy将“dir:”视为一个标签,所以我无法处理它

你知道我如何接收这个构造的回调(getProperty,invokeMissingMethod)吗


谢谢大家!

我不相信您可以通过这种方式实现这一点,您需要稍微更改您的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()
} 
输出将是

目录[全球存储]

或者您可以这样定义dsl:

class Foo {
    static plan = {
        vplan_testing {
            test dir:'global_storage'
        }
    }
}
将“测试”替换为对您的域有意义的内容。在这种情况下,输出将是

测试[[dir:全局存储]]

希望这有帮助


-肯

谢谢你。我希望我可以使用Groovy DSL作为现有格式的解析器,而不做任何更改