使用Groovy的DSL - >传递参数值

ivi*_*ita 5 dsl groovy

我是Groovy的新手,我正在为一些特定的任务编写一个迷你DSL.为此,我一直在尝试解决下面这样的问题:我想通过调用此代码(不使用parantheses)来打印(和/或返回)5:

give me 5 
Run Code Online (Sandbox Code Playgroud)

我希望下面这样的定义可行:

def give = {clos ->  return clos} 
def me = {clos ->  println clos; return clos} 
Run Code Online (Sandbox Code Playgroud)

但事实上并非如此.你能帮我解释一下如何定义"给"和"我",以便用表达式"给我5"返回值5,其中必须是一个闭包,给出也可以是metaClass,属性等.

提前致谢!IV

tim*_*tes 3

Groovy 1.8+ 需要

give me 5
Run Code Online (Sandbox Code Playgroud)

并且解析器有效地尝试执行以下操作:

give( me ).5
Run Code Online (Sandbox Code Playgroud)

因此,如果您像这样编写代码,它就会起作用:

def give = { map ->  map } 
def me = [:].withDefault { it }

a = give me 5

println a
Run Code Online (Sandbox Code Playgroud)

印刷:

5
Run Code Online (Sandbox Code Playgroud)