高阶函数初探(三)
Published:
本周主要继续之前设计的实验,本打算在一个星期内做完所有实验,结果发现里面有很多问题。
Main Work (上周完成的主要工作)
上周主要按照之前的实验设计统计数据。统计的数据主要有:
- 高阶函数的数量,声明类型数量:
- 类型一:仅参数包含函数:
- 类型二:仅返回函数:
- 类型三:both:
- 统计结果:
- 类型一:仅参数包含函数:
- 高阶函数的行数:
- 分为0-10,10-20,20-30,30-四种类型,统计结果:
- 分为0-10,10-20,20-30,30-四种类型,统计结果:
- 高阶函数调用类型:
- 类型一:参数为函数,其中函数来自本类内新建的函数:
- 类型二:参数为函数,函数为匿名函数,lambda函数,写在方法调用体中:
- 类型三:参数为函数,函数是传入对象的一个属性:
- 类型四:无参数,函数声明是仅返回函数:
- 统计结果:
- 类型一:参数为函数,其中函数来自本类内新建的函数:
- 高阶函数声明调用作者:
- git log 文件:
- 根据log文件,函数路径,函数名查找作者,程序截图:
- 统计结果(未统计完):
- git log 文件:
- 高阶函数嵌套高阶函数的例子:
- 高阶函数模板使用数量:
- 模板函数:
- 统计结果(暂未统计)
- 模板函数:
遇到的问题
- scala meta 无法提取出函数调用,scala meta提供了相关的工具 SemanticDB,顾名思义语义数据库,也就是在程序编译的时候将各种方法符号写进他自己定义的数据库中,但是针对一些简单的程序,加了这个组件是没问题,但是针对一些较大的程序,加了组件编译不通过,无法得到数据库。 https://scalameta.org/docs/semanticdb/guide.html
还有就是前两天,看之前写的异常处理的程序的时候,还可以利用jar包来解析调用关系,但是还没有尝试,我在提取作者的时候需要文件路径和方法名,不知最后能不能提供出来。还有就是我觉得除了前三个项目的scala项目高阶函数较多,其他的项目相对较少,手动统计工作量也不是很巨大,我一般就是将项目导入Idea,然后find usage查找调用。
- 遇到的第二个问题就是提取作者的时候,我的思路是通过
git log -p> **.txt
的命令首先将所有的commit的信息生成文件,然后对文件中的字符串进行切割,预处理,搜索,查找我们制定的作者,但是有时候这个文件又特别大,很占内存,读的时候很慢,实验也就卡在这里了,我也尝试了其他读取文件的方法,效果不是很好,另外,java提供了jGit这个工具,可以允许你用java代码调用git接口,但是我找到了git.log()这个api,但是得到的东西很少,没有包含每次提交添加了什么代码,也就是没有命令行里面-p
的选项。
下周的工作
针对上面的问题,继续寻找解决方法,增加项目数量,继续统计数据。