groovy - 带有 Groovy 的 DSL -> 传递参数值

标签 groovy dsl

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

give me 5 

我预计像下面这样的定义会起作用:

def give = {clos ->  return clos} 
def me = {clos ->  println clos; return clos} 

但实际上并非如此。您能否帮助我如何定义“give”和“me”,以便使用表达式“give me 5”返回值 5,其中 me 必须是一个闭包,give 也可以是元类、属性等。

提前致谢! 四、

最佳答案

Groovy 1.8+ 需要

give me 5

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

give( me ).5

所以,如果你像这样编写代码,它就可以工作:

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

a = give me 5

println a

打印:

5

关于groovy - 带有 Groovy 的 DSL -> 传递参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11898523/

相关文章:

spring - Grails Spring 安全困惑

grails - 导致GORM字段的类型转换导致验证失败

java - 加载和分析海量数据

unit-testing - 从函数返回匿名对象并在 Kotlin 中推断类型

macros - 将 Clojure 宏用于 DSL

elasticsearch - 如何在 Elasticsearch 中的 match_all 中使用过滤器

java - 如何从控制台获取异常日志并将其写入外部文件?

grails - 在JBoss6上部署Grails 1.3.2 War时出错

language-design - 有没有关于 DSL 设计的书籍/论文? (不是 DSL 实现)

elasticsearch - DSL查询以从字典数组中查找元素