Jenkins Groovy Truthy问题:String.split()生成空数组,但是否为“true”?怎样

Jenkins Groovy Truthy问题:String.split()生成空数组,但是否为“true”?怎样,jenkins,groovy,Jenkins,Groovy,下面是我在grooysh shell中采取的一系列步骤,以演示问题 String.split=>String[]与Java SDK中的预期一致。当我将其作为连续表达式的一部分进行求值时:changedDirs.split'\r\n'.collect{…},我的collect执行1次,其中包含一个空值。让我承认:这段代码是在Jenkins服务器上运行的,Jenkins被认为具有groovy运行的方言。但是,无论如何,当我用groovysh在本地测试它时,我确实得到了一些我没有预料到的东西:[]如果

下面是我在grooysh shell中采取的一系列步骤,以演示问题

String.split=>String[]与Java SDK中的预期一致。当我将其作为连续表达式的一部分进行求值时:changedDirs.split'\r\n'.collect{…},我的collect执行1次,其中包含一个空值。让我承认:这段代码是在Jenkins服务器上运行的,Jenkins被认为具有groovy运行的方言。但是,无论如何,当我用groovysh在本地测试它时,我确实得到了一些我没有预料到的东西:[]如果它来自String.split,则计算结果为truthy

那么,有人能解释一下:

下面的groovy代码如何为String.split而不是基本的空[]生成truthy 詹金斯在做什么奇怪的事吗? 由于changedDirs.split'\r\n'生成的字符串[]数组包含一个元素,即空字符串,因此结果的计算结果为布尔值true。请看以下示例:

groovy:000> ([] as String[]).class
===> class [Ljava.lang.String;
groovy:000> ([] as String[]) ? true : false
===> false
groovy:000> x = ([] as String[])
===> []
groovy:000> x.dump()
===> <[Ljava.lang.String;@5c41d037>
groovy:000> y = "".split(",")
===> []
groovy:000> y.class
===> class [Ljava.lang.String;
groovy:000> y.dump()
===> <[Ljava.lang.String;@79a1728c>
groovy:000> y ? true : false
===> true
groovy:000> y.length
===> 1
groovy:000> x.length
===> 0
groovy:000> y[0].dump()
===> <java.lang.String@0 value= hash=0>
groovy:000> 
这个SO问题可能很有用-

结果作为布尔值计算为true,因为changedDirs.split'\r\n'生成的字符串[]数组只有一个元素,即空字符串。请看以下示例:

groovy:000> ([] as String[]).class
===> class [Ljava.lang.String;
groovy:000> ([] as String[]) ? true : false
===> false
groovy:000> x = ([] as String[])
===> []
groovy:000> x.dump()
===> <[Ljava.lang.String;@5c41d037>
groovy:000> y = "".split(",")
===> []
groovy:000> y.class
===> class [Ljava.lang.String;
groovy:000> y.dump()
===> <[Ljava.lang.String;@79a1728c>
groovy:000> y ? true : false
===> true
groovy:000> y.length
===> 1
groovy:000> x.length
===> 0
groovy:000> y[0].dump()
===> <java.lang.String@0 value= hash=0>
groovy:000> 
这个SO问题可能有用-

。inspect比.dump更好地说明了这个问题。下面是我所做的:changedDirs?:null?.split'\r\n',这会产生我想要的结果。伙计,即使你认为自己知道很多…inspect比.dumpHere更能说明问题我做的是:changedDirs?:null?.split'\r\n'这会产生我想要的。伙计,即使你认为你知道很多。。。