Eclipse能够利用编译后的字节码来启用“魔术重构”功能-重命名方法,向上和向下跟踪类层次结构以及通过方法调用进行跟踪。
存在哪些技术障碍使诸如Python和Javascript这样的语言更难做到?
最佳答案
由于动态绑定(bind)。 Python是一种动态语言,您几乎可以使用变量来做所有事情。您甚至可以访问globals-dict并引入由运行时值组成的新变量。
因此,IDE无法确定何时存在哪些变量。请参阅以下示例:
#silly.py
import sys
if len(sys.argv) > 1:
thisNowExists = True
#1
try:
if thisNowExists:
print("this existed before")
except NameError:
print("this _now_ exists")
thisNowExists = True
没有人或IDE无法知道是否在
thisNowExists
位置定义了#1
,因此,如果要在该点以下重命名愚蠢的thisNowExists
,是否还要在#1
之前重命名外观是不确定的。您可能需要进行高级控制流分析,才能很好地猜测
thisNowExists
是在try / catch语句下定义的,但是由于脚本(thisNowExists = 1; import silly
)和排序的动态加载,它甚至可能在没有参数的import sys
之前存在。最好以不同的方式命名变量并查找/替换;)