xonsh: конфликт между псевдонимом и функцией с тем же именем - PullRequest
0 голосов
/ 25 мая 2018

Эта функция определена в моем xonshrc:

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

Она должна конвертировать функцию в псевдоним.Но это не работает.Он правильно добавляет псевдоним, но eting del не работает, потому что он удаляет переданную ему ссылку на функцию.

Можно ли настроить xonsh так, чтобы он давал псевдонимам более высокий приоритет?(вероятно, нет, потому что в конце концов это python, в таком случае:)

Есть ли способ добиться желаемого эффекта в xonsh?

1 Ответ

0 голосов
/ 26 мая 2018

В 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]
...