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之前存在。

最好以不同的方式命名变量并查找/替换;)

10-04 12:05