在groovy中,这在语法上意味着什么?

bpsygsoo  于 2022-11-01  发布在  其他
关注(0)|答案(2)|浏览(146)

当我在groovy shell(2.5.8)中这样做时:

groovy:000> println("s":"s")
[s:s]
===> null

为什么我的print语句打印了一个Map(如果是这样的话)?

nukf8bse

nukf8bse1#

语法println("s":"s")是传递Named参数的一个示例,这些参数被解释为Map
与构造函数一样,普通方法也可以用命名参数调用。为了支持这种表示法,使用了一种约定,其中方法的第一个参数是Map
因此,您有一个名为s的参数,其值也是s,Groovy将它们放入Map中,如上面链接的文档所示。这个语法对任何接受Map作为第一个参数的方法都有效。在println的情况下,它接受Object,并且由于MapObject,因此可以将命名参数传递给此方法。

bq8i3lrv

bq8i3lrv2#

您看到的是Groovy中Map文字中省略了方括号。
该调用可重写为:

println( [ "aa":"bb" ] ) // all brackets in place
println "a":"bb" // no brackets at all
println a:"bb" // a variant, where the left part of : is treated as key in Map Literal

相关问题