当我在groovy shell(2.5.8)中这样做时:
groovy:000> println("s":"s") [s:s] ===> null
为什么我的print语句打印了一个Map(如果是这样的话)?
nukf8bse1#
语法println("s":"s")是传递Named参数的一个示例,这些参数被解释为Map。与构造函数一样,普通方法也可以用命名参数调用。为了支持这种表示法,使用了一种约定,其中方法的第一个参数是Map。因此,您有一个名为s的参数,其值也是s,Groovy将它们放入Map中,如上面链接的文档所示。这个语法对任何接受Map作为第一个参数的方法都有效。在println的情况下,它接受Object,并且由于Map是Object,因此可以将命名参数传递给此方法。
println("s":"s")
Map
s
println
Object
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
2条答案
按热度按时间nukf8bse1#
语法
println("s":"s")
是传递Named参数的一个示例,这些参数被解释为Map
。与构造函数一样,普通方法也可以用命名参数调用。为了支持这种表示法,使用了一种约定,其中方法的第一个参数是
Map
。因此,您有一个名为
s
的参数,其值也是s
,Groovy将它们放入Map
中,如上面链接的文档所示。这个语法对任何接受Map
作为第一个参数的方法都有效。在println
的情况下,它接受Object
,并且由于Map
是Object
,因此可以将命名参数传递给此方法。bq8i3lrv2#
您看到的是Groovy中Map文字中省略了方括号。
该调用可重写为: