有人能解释一下文档中的Groovy命令链dsl示例吗......文本被解析成Map和闭包

nkcskrwz  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(130)
show = { println it }
square_root = { Math.sqrt(it) }

def please(action) {
  [the: { what ->
    [of: { n -> action(what(n)) }]
  }]
}

// equivalent to: please(show).the(square_root).of(100)

please show the square_root of 100
// ==> 10.0

我知道please(show)返回一个对象,该对象有一个名为the(param)的方法,而the(param)又返回一个对象,该对象有一个of(param)方法。
我不明白的是

please show the square_root of 100

please(show)之后被转换为Map和闭包

aydmsdu9

aydmsdu91#

这里的关键是写出代码,而不遗漏“可选”调用和成员访问。即:

please(show).the(square_root).of(100)

这样做的工作方式是通过返回一个Map来链接下一个调用,(至少)在句子”中“有一个键,它又有一个闭包作为值来继续这个链。
因此,为了更详细地写出它(针对链中的一个链接):

.getAt('the').call(square_root)

相关问题