采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
当你第一次使用each方法,里面的闭包参数写了:def student 1.此时这个student是不是等于it? 2.此时的student是不是就是each源码里面的那个Map类型的self?
你这个问题其实点进源码查看方法就知道
each其实只是一个语法糖,虽然我们写的时候看起来只传递了一个闭包的参数
但你把生成的class反编译你就会看到,实际在java中是调用的DefaultGroovyMethods.each()然后这个方法需要传递两个参数,第一个是map,第二个是闭包
那么回答你第二个问题self其实是传递进来的Map集合,跟闭包没有关系,接下来我们看你说的第一个问题,最终each方法会调用callClosureForMapEntry()方法
在方法里面可以看出对于闭包是支持单个参数和两个参数的,如果闭包是单个参数那么传递给闭包的就是map的entry对象,如果闭包是两个参数,那么就是map的key和value,然后又由于如果只是一个参数的时候是可以省略在闭包中的声明的,所以对于你第一个问题student是等于it,也就是map的entry对象
本以为这问题只会有qndroid来答,没想到还能遇到一位大师兄的耐心详尽解答!非常感谢!向您学习!请问下师兄你是真的会把生成的class反编译来看看从而学习吗?通过什么软件反编译呢?
牛逼!!!
用Intellij在out文件夹下能看到生成的class文件,然后点进去就自动给反编译成java代码了
完美的回答!
登录后可查看更多问答,登录/注册
全面覆盖Gradle核心知识和高级用法,高级工程师必备技能!
903 9
983 8
7.8k 7
1.4k 6
989 5