Копирование функции из пакета в Julia - PullRequest
1 голос
/ 10 марта 2019

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я знаю, что следующее крайне плохая практика.Мне просто нужно быстрое исправление для целей отладки.

Я пытаюсь запустить пакет Julia, который using и JuMP.jl и LightXML.jl.

Я получаю следующую ошибку:

WARNING: both JuMP and LightXML export "name"; uses of it in module JEMSS must be qualified

Сначала добавляется LightXML, поэтому я хотел бы сделать копию name, а затем переопределить JuMP.

Что такое синтаксисдля этого?

Функция name состоит из:

name(::LightXML.XMLElement)
name(::LightXML.XMLNode)
name(::LightXML.XMLAttr)

1 Ответ

2 голосов
/ 10 марта 2019

Исходя из обсуждения в комментариях, я должен написать, что предупреждение говорит вам, что если вы хотите использовать name в своем коде, вы должны указать, какой модуль name вы хотите использовать.Вы можете сделать это , указав , указав имя модуля / пакета, например LightXML.name или JuMP.name.

Если вы хотите создать псевдоним для,скажем, LightXML.name, это также возможно.

using LightXML

# make `name2` be an alias for `LightXML.name`
const name2 = LightXML.name # `name2` refers to `LightXML.name` but `LightXML.name` still exists

using JuMP
using JuMP: name # tell the compiler `name` without qualifiers refer to `JuMP.name` so you do not have to qualify it

Это на самом деле не дает изменения имени LightXML.name, а скорее создает псевдоним для LightXML.name.После этого вы можете написать name2 вместо LightXML.name или по-прежнему использовать LightXML.name как есть.

Обратите внимание, что const является важной деталью, в противном случае всякий раз, когда вы используете name2, Джулия должна будетПосмотрите, изменилось ли то, на что ссылается name2, и это снизит производительность.

Еще одна вещь, которую стоит отметить, - если вы хотите использовать name без квалификаторов для ссылки на JuMP.name, вы пишете using JuMP: name, чтобы указать компилятору, какой name следует использовать (поскольку еще есть два name s).Однако вы должны сделать это до , используя name без какого-либо спецификатора в вашем коде.

Следовательно, следующее не сработает.

julia> using LightXML
julia> name             # we used `name` here to refer to `LightXML.name `
julia> using JuMP       # this will give you the same warning in your question
julia> using JuMP: name # this will give you a warning and be **ignored**

# `name` continues to refer to `LightXML.name` rather than `JuMP.name`
...