0

私はhttp://JonathansCorner.com/cjshに実験的なシェルを持っています。これは、とりわけ、階​​層に埋もれたファイルを見つける時間を短縮し、[不完全ながら] EMACS が無制限の Lisp カスタマイズを許可するように、無制限の Python カスタマイズを許可することを目的としています。

最初にリファクタリングして、ユーザーが exec() よりも長生きする変数を設定する機能を制限する関数を削除してから、モンキー パッチ用のフックを提供することを目的とした方法で他の関数にリファクタリングしました。

新しい関数の定義と呼び出しに成功し、シェルにモンキー パッチを適用する最も明白な方法の 1 つ以外に、他の領域にモンキー パッチを適用して、ユーザーに入力を促す関数をオーバーライドすることに成功しました。カスタマイズされたプロンプト。このための関数は use_main_prompt() であり、カスタマイズ可能な動作以外のことを行うためにオーバーライドしたことはありません。

CJSH シェルを使用する場合のエンドユーザーの構文は、インデントされた行は Python の行であり、インデントされていない行はシェルの行です。

http://JonathansCorner.com/cjsh/download.cgiで、その呼び出しの新たな再バインドを妨げるようなことはありますか? 「一から調べてください」と言えることはありますか?

4

1 に答える 1

0

モンキー パッチ機能により、元のコンテキストでスコープが変更されます。これをテストするには、2 つの異なるファイルを作成し、それらにモンキー パッチを適用してみてください。

something.py:

def patchable_function():
    return "I have not been patched yet"

def another_function():
    return patchable_function()

else.py

import something
from something import another_function

print another_function() # "I have not been patched yet"
something.patchable_function = lambda : "I AM PATCHED!"
print another_function() # "I AM PATCHED!"
于 2012-10-06T04:47:18.150 に答える