【问题标题】:xonsh: Clash between alias and function with same namexonsh:别名和同名函数之间的冲突
【发布时间】:2018-05-25 10:55:40
【问题描述】:
我在xonshrc 中定义了这个函数:
def turn_into_alias(func, keep=False):
aliases[func.__name__] = func
del func
它应该将函数转换为别名。但它不起作用。它可以添加别名,但 deleting 不起作用,因为它删除了传递给它的函数引用。
是否可以设置 xonsh 以赋予别名更高的优先级? (可能不是,因为它毕竟是python,在那种情况下:)
有没有办法在xonsh中实现我想要的效果?
【问题讨论】:
标签:
python
function
shell
alias
xonsh
【解决方案1】:
在 Python 和 xonsh 中,del 仅修改当前范围。因此,在您的示例中,您实际上只是删除了turn_into_alias() 中的名称func。函数对象可能仍然在其他地方引用它,因此 Python 不会删除它。
由于它在您的 xonshrc 中,可能最简单的做法是将其从 globals() 或 __xonsh_ctx__ 中删除。
类似下面的东西应该可以工作
def turn_into_alias(func, keep=False):
name = func.__name__
aliases[name] = func
del globals()[name]
或
def turn_into_alias(func, keep=False):
name = func.__name__
aliases[name] = func
del __xonsh_ctx__[name]