有人可以在文档中解释 Groovy 命令链 dsl 示例吗...文本被解析为映射和闭包

Can someone explain Groovy command chain dsl example in documentation... the text got parsed into maps and closures

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

我明白了,请(显示)returns 一个对象,它有一个名为 the(param) 的方法,而该方法又 returns 一个对象,它有一个方法 (param)。

我不明白的是,“please show the square_root of 100”这一行是如何在 please (show)

之后转换为地图和闭包的

这里的关键是在没有“可选”调用的情况下写出代码,并且 缺少成员访问权限。即:

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

当时的工作方式是通过返回一个映射来链接下一个调用,其中 (at 至少)一个“在句子中”的键,它再次具有闭包的价值 继续这条链。

所以写得更冗长(一个 link 链中):

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