gpt4 book ai didi

Groovy:相同的参数,不同的结果

转载 作者:行者123 更新时间:2023-12-02 05:56:30 26 4
gpt4 key购买 nike

在下面的代码中,x.test() 返回[1,2]

所以y = [1,2]

但是 f([1,2]) 打印 1,但 f(y) 打印 2

如何编写 f(y) 以便打印 1

反常的是,即使 z = yf(z) 也会打印 1

def f = { Object... args -> println args.size(); };

class Test { Object[] test() { return [1,2]; } }

def x = new Test();
def y = x.test();
def z = [1,2];

f([1,2]); // 1
f(y); // 2
f(z); // 1

最佳答案

问题是 yz虽然它们看起来相同,但实际上是不同的类型。 yObject[]zArrayList<Integer> 。 Groovy 对数组和列表的处理方式不同,会自动将前者强制转换为可变参数参数列表,但不会将后者强制转换为可变参数列表。

println y.getClass(); // class [Ljava.lang.Object
println z.getClass(); // class java.util.ArrayList

至于解决您的问题,请更改您的 test()返回 List而不是数组:

class Test { List test() { return [1,2]; } }

或者在将数组传递给 f 时手动将数组强制转换为列表:

f(y as List); // 1

关于Groovy:相同的参数,不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16890893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com