0

我在http://JonathansCorner.com/cjsh有一个实验性的 shell ,除其他外,它旨在减少查找隐藏在层次结构中的文件的时间,并 [不完美地] 允许无限的 Python 定制,就像 EMACS 允许无限的 Lisp 定制一样。

我首先对其进行了重构,以删除会限制用户设置比 exec() 寿命更长的变量的能力的函数,然后以旨在为猴子修补提供挂钩的方式在其他函数中重构。

我已经成功地定义和调用了新函数,并且我已经成功地对其他区域进行了猴子修补,除了猴子修补外壳的最明显方法之一,覆盖提示用户输入的函数,以便用户可以拥有一个自定义提示。这个函数是 use_main_prompt(),我从来没有重写它来做任何事情,除了它的可定制行为。

如果您想使用 CJSH shell,最终用户语法是缩进的行是 Python 行,而未缩进的行是 shell 行。

我在http://JonathansCorner.com/cjsh/download.cgi中做的任何事情会阻止重新绑定该调用吗?我有什么办法可以说“请从头开始看?”

4

1 回答 1

0

猴子修补函数会导致原始上下文中的范围发生变化。要对此进行测试,请尝试创建两个不同的文件并对其进行修补:

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 回答