【问题标题】: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]
    

    【讨论】:

      猜你喜欢
      • 2013-12-11
      • 2021-09-03
      • 2012-09-15
      • 2015-10-05
      • 2012-10-01
      • 2011-04-21
      • 1970-01-01
      • 2012-08-07
      • 2020-04-23
      相关资源
      最近更新 更多