xonsh: конфликт между псевдонимом и функцией с тем же именем
Я определил эту функцию в моем xonshrc
:
def turn_into_alias(func, keep=False):
aliases[func.__name__] = func
del func
Предполагается преобразовать функцию в псевдоним. Но это не работает. Это добавляет псевдоним все в порядке, кроме del
eting не работает, потому что удаляет переданную ему ссылку на функцию.
Можно ли настроить xonsh так, чтобы он давал более высокий приоритет псевдонимам? (вероятно, нет, потому что в конце концов это Python:)
Есть ли способ добиться желаемого эффекта в xonsh?
1 ответ
В 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]