为什么这个不带参数的`join`方法调用会成功?

问题描述 投票:0回答:1

这个 Groovy 脚本看起来很简单:

def a = [].join()
println a

我希望它会抛出

MissingMethodException
,因为
join
方法需要一个参数,如果我正在查看正确的,但它工作很好。 而here是该方法的源代码,因此该参数绝对不是可选的。 你知道它在哪里失败了吗?当然是在詹金斯。

那么,为什么它有效呢?是否有一些我不知道的 Groovy 约定?或者它实际上调用了不同的方法?

jenkins groovy jenkins-groovy
1个回答
0
投票

我认为您正在提供参数,但它是空的。您最终在 DefaultGroovyMethods 类中调用此方法:

public static String join(Iterator<?> self, String separator) {
        if (separator == null) {
            separator = "";
        }
...

虽然默认的 groovy 方法被注入到所有 Groovy 对象中(您可以在注释中找到此信息here),但我假设第一个参数始终通过将其注入可迭代的事实来填充,而第二个参数如您所见设置为空当字符串为空时。因此,我认为

[].join()
将空列表和 null 传递给
join
方法,这实际上意味着将空字符串设置为分隔符。

© www.soinside.com 2019 - 2024. All rights reserved.