通过检查以下编程语言(Java、Python 和 Lisp)的源代码可以解决的源代码依赖程度如何。
例如,我是否可以通过查看一组 Python 文件来确定检查每个文件中的所有“导入”语句是唯一的依赖项(源依赖项)?
在 Lisp 中,我知道 (load "filename") 命令允许包含在其他文件中定义的函数。
Python中有更多的导入方式
例如
somemodule = __import__("somemodulename")
也可以在运行时更改路径,例如
import os
可能不会导入os
您期望的模块。
您还可以通过其他方式包含代码
execfile(...)
execfile(filename[, globals[, locals]])
Read and execute a Python script from a file.
The globals and locals are dictionaries, defaulting to the current
globals and locals. If only globals is given, locals defaults to it.
您甚至可以包含存储在数据库中或从 url 下载的代码片段
所以不,你不能肯定地说
即使您找到任何类型的“导入”语句,也不保证代码会使用它。
在 Java 中,您可以导入名称空间,但也可以使用类的完整限定名,而无需任何导入语句
javax.swing.JButton but = new javax.swing.JButton("MyButton");
最后但并非最不重要的一点是,它们都支持某种符号编程。您可以使用纯字符串来加载或执行代码:
对象 x = Class.forName("javax.swing."+compName); 返回 x.toString();