提问人:X. Poirot 提问时间:11/9/2023 更新时间:11/9/2023 访问量:28
将 String 转换为 String[] 在变量定义或用作函数参数时会产生不同的结果
Converting a String to a String[] yields different results when used in variable definition or as function parameters
问:
我正在尝试在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 的数组?
我本来以为这两种情况都会产生相同的结果。
答:
0赞
cfrick
11/9/2023
#1
第二部分根本不是胁迫/铸造;您正在使用可变参数 像 Java(语言)一样的参数,底层 JVM 具有 没有数组的概念,并且始终使用数组。
第一部分大致是通过以下方式将投射到阵列 列表
评论
0赞
X. Poirot
11/10/2023
谢谢!有了这个提示,我也可以在文档中找到它。我将链接到 Groovy 文档以供参考:groovy-lang.org/objectorientation.html#_varargs
评论