Прикрепление временного пространства имен к пути поиска
Этот вопрос является своего рода продолжением этогосообщение Насколько я'Я до сих пор не совсем убежден, что в отношении надежности кода это нелучше печататьnamespace::foo()
привычка вместо того, чтобы просто печататьfoo()
и молясь, вы получите желаемый результат ;-)
Я знаю, что это идет вразрез с "стандартные соглашения R ", но пустьпросто скажи ямне любопытно ;-)Можно ли как-то прикрепить временное пространство имен к пути поиска?
мотивацияВ момент, когда мой пакетmypkg
все еще в "этап разработки " (Т.е.пока не настоящий пакет R):Я'
mypkg
вместо.GlobalEnv
затем приложитеmypkg
к пути поиска (как истинное пространство имен, если это возможно)для того, чтобы я мог позвонитьmypkg::foo()
я прекрасно осознаю, что звонит::
имеет свои недостатки (это занимает больше времени, чем просто ввод функции 's имя и позволить R обрабатывать поиск неявно) и / или могут не считаться необходимыми из-за способаа) R просматривает путь поиска иб) пакеты могут импортировать свои зависимости (т. е. используя "Импорт» вместо "Зависит", не экспортируя определенные функции и т. д.). Но я'я видел мой код по крайней мере дважды из-за того, что некоторые пакеты перезаписали определенные (базовые) функции, поэтому я перешел от "слепое доверие к "Лучше быть в безопасности, чем потом сожалеть" Режим ;-)
AFAIU, пространства имен в принципе не что иное, как какая-то особая среда
> search()
[1] ".GlobalEnv" "package:stats" "package:graphics"
[4] "package:grDevices" "package:utils" "package:datasets"
[7] "package:methods" "Autoloads" "package:base"
> asNamespace("base")
И там'сattach()
функция, которая прикрепляет объекты к пути поиска. Так вот'Что я думал?
temp.namespace asNamespace("temp.namespace")
Error in loadNamespace(name) :
there is no package called 'temp.namespace'
Я думаю, мне как-то приходится работатьattachNamepace()
и выяснить, что это ожидает, прежде чем он вызывается вlibrary()
, Есть идеи?
С уважением к Хэдликомментарий: я бы на самом деле нене важно, является ли подключенная среда полноценным пространством имен или просто обычной средой, если я могу расширить::
сохраняя при этомсинтаксическое сосание " особенность (т.е. возможность звонитьpkg::foo()
вместо"::"(pkg="pkg", name="foo")()
).
Это как функция"::"
похоже:
> get("::")
function (pkg, name)
{
pkg