我尝试在Groovy中实现一个小函数,将一个String数组作为输入并以YAML格式打印。
Groovy似乎以不同的方式将String变量转换为String[],无论是在变量定义中还是在函数参数的定义中。
下面的代码片段显示了这种奇怪的行为:
// #1
println '#1'
def h = 'one'
println h.class
String[] a = h
println a.class
println a.length
println a
// #2
println '#2'
String f(String[] param) {
println param.class
println param.length
println param
}
f(h)
字符串
运行Groovy 2.4.16:
#1
class java.lang.String
class [Ljava.lang.String;
3
[o, n, e]
#2
class [Ljava.lang.String;
1
[one]
型
我搜索了Groovy规范,没有找到任何解释这种行为的东西。
有没有人能解释一下为什么:
- 将String传递给变量定义中的String[]变量将String拆分为各个字符,
- 而将一个String传递给一个需要String[]参数的函数会用给定的字符串创建一个大小为1的数组吗?
我本以为这两种情况会产生同样的结果。
1条答案
按热度按时间hjzp0vay1#
第二部分根本不是强制/转换;您使用的是像Java(语言)中一样的可变参数,底层JVM没有数组的概念并且总是使用数组。
第一部分大致是通过列表转换为数组