Groovy中的任何方法如何工作?

Ant*_*t's 9 groovy jvm-languages

我遇到了这段代码:

n = args[0] as Long
[*n..1, n].any{ println ' '*it + '*'*(n - ~n - it*2) }
Run Code Online (Sandbox Code Playgroud)

它用于打印树形结构.像这样:

    *
   ***
  *****
 *******
    *
Run Code Online (Sandbox Code Playgroud)

(for n= 4)

  1. 代码是如何[*n..1,n]产生的[4, 3, 2, 1, 4]

  2. any方法如何在这里工作?该文件没有帮助我很多.什么是预测可以传递给any(如Doc的提到)?

any在这种情况下使用什么以及如何处理它?

Dav*_*ton 11

Q1a:*"解包"一个数组...创造一个范围.[]创建一个集合.
Q1b:将*n..1[4,3,2,1]解包到各个部分.
Q1c:[4,3,2,1,n]==[4,3,2,1,4]

Q2:我不知道为什么any在这里使用; each同样有效,在上下文中更有意义.any 确实循环通过该连接,所以println副作用发挥预期的作用.

通常any用于确定是否有任何集合元素符合标准,例如:

[*n..1,n].any { it > 10 } // Returns false, no elements are > 10
[*n..1,n].any { it == 3 } // Returns true, because at least one element is 3
Run Code Online (Sandbox Code Playgroud)

关闭的最后一个陈述用于确定每个项目是否符合标准.println返回null,因此any将返回false.该值未使用并被丢弃.

我能想到有人可能使用的唯一原因any是避免each在控制台中看到返回值.each返回原始集合.