1

我在我的中定义了这个函数xonshrc

def turn_into_alias(func, keep=False):
    aliases[func.__name__] = func
    del func

它应该将函数转换为别名。但它不起作用。它可以添加别名,但是deleting 不起作用,因为它删除了传递给它的函数引用。

是否可以设置 xonsh 以便为别名提供更高的优先级?(可能不是,因为它毕竟是python,在那种情况下:)

有没有办法在xonsh中达到我想要的效果?

4

1 回答 1

0

在 Python 和 xonsh 中,del只修改当前范围。因此,在您的示例中,您实际上只是在func删除turn_into_alias(). 函数对象可能仍然在其他地方引用它,因此 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]
于 2018-05-26T14:50:48.943 回答