我遇到了这段代码:

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

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

    *
   ***
  *****
 *******
    *

(对于n = 4)

  1. 代码[*n..1,n]产生[4, 3, 2, 1, 4] [*n..1,n] [4, 3, 2, 1, 4]

  2. any方法如何在这里工作? Doc对我帮助不大。 可以传递给any的预测是any (如Doc所述)?

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

===============>>#1 票数: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

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

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

===============>>#2 票数:3

1) n..1被称为范围文字,它创建一个groovy.lang.Range对象,从n减1到1 然后使用“ Spread运算符 (*)”将其合并到周围的列表上下文中

2) any方法在DefaultGroovyMethods定义,它是一个谓词函数,如果集合中的元素满足提供的谓词闭包,则返回true。 在此示例中,代码不检查返回值,因此原始其他人可能使用each调用生成相同的输出。

  ask by Ant's translate from so

未解决问题?本站智能推荐:

关注微信公众号