关于each方法
来源:4-13 映射详解(下)

全是甘货
2019-05-18
当你第一次使用each方法,里面的闭包参数写了:def student
1.此时这个student是不是等于it?
2.此时的student是不是就是each源码里面的那个Map类型的self?
写回答
2回答
-
你这个问题其实点进源码查看方法就知道
each其实只是一个语法糖,虽然我们写的时候看起来只传递了一个闭包的参数
但你把生成的class反编译你就会看到,实际在java中是调用的DefaultGroovyMethods.each()然后这个方法需要传递两个参数,第一个是map,第二个是闭包
那么回答你第二个问题self其实是传递进来的Map集合,跟闭包没有关系,接下来我们看你说的第一个问题,最终each方法会调用callClosureForMapEntry()方法
在方法里面可以看出对于闭包是支持单个参数和两个参数的,如果闭包是单个参数那么传递给闭包的就是map的entry对象,如果闭包是两个参数,那么就是map的key和value,然后又由于如果只是一个参数的时候是可以省略在闭包中的声明的,所以对于你第一个问题student是等于it,也就是map的entry对象
272019-05-23 -
qndroid
2020-04-08
完美的回答!
00
相似问题