4

Eclipse は、コンパイルされたバイトコードを利用して、「魔法のリファクタリング」機能 (メソッドの名前変更、クラス階層の上下のトレース、メソッド呼び出しのトレース) を有効にすることができます。

Python や Javascript などの言語でこれを行うのを難しくしている技術的な障壁は何ですか?

4

2 に答える 2

6

動的バインディングのため。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

thisNowExistsが の位置で定義されているかどうかは、人間も IDE も知ることができないため、その位置より下にある#1愚かな名前の名前を変更したい場合thisNowExists、外観の名前も の前#1に変更する必要があるかどうかは未定義です。

try/catch ステートメントの下に定義されている適切な推測を行うには、高度な制御フロー分析を行う必要がありますが、スクリプト ( ) と並べ替えthisNowExistsの動的な読み込みにより、引数なしで前に存在することさえあります。thisNowExists = 1; import sillyimport sys

変数に別の名前を付けて、検索/置換が最良のオプションです;)

于 2011-02-14T19:04:27.547 に答える
1

したがって、メソッドやクラス階層などの静的情報のトレースは、Python で完全に可能であることがわかります。PyDev Eclipse プラグインがそれを行います。PyLint プラグインは、動的変数のようなものに対しても静的分析を実行しようとします。これは、実行時に異常が発生せず、非常にうまく機能すると想定することによって行われます。

于 2011-03-18T22:57:07.630 に答える