"Imports"
olduğundan daha güvenlidir "Depends"
(ve aynı zamanda onu kullanan bir paketi, kullanılan diğer paketlere göre 'daha iyi bir vatandaş' yapar "Depends"
).
Bir "Depends"
yönerge, diğer paketi ana arama yoluna (yani tarafından döndürülen ortamların listesi search()
) ekleyerek başka bir paketten bir işlevin kullanılabilir olmasını sağlamaya çalışır . Bununla birlikte, daha sonra yüklenen başka bir paket, arama yoluna daha önce aynı şekilde adlandırılmış bir işlevi yerleştirirse, bu strateji engellenebilir. (Chambers soda ) fonksiyonunun örneğini kullanarak, "gam"
hem de bulunur, gam
ve mgcv
paketler. gam
Biri bağlı, diğeri bağlı olmak üzere iki paket daha yüklenmişse, mgcv
çağrılar tarafından bulunan işlev, gam()
bu iki paketin eklendiği sıraya bağlı olacaktır. İyi değil.
Bir "Imports"
yönerge , normal arama yolu yerine işlevleri yerleştirilecek <imports:packageName>
(hemen sonra aranacak <namespace:packageName>
) herhangi bir destekleyici paket için kullanılmalıdır . Yukarıdaki örnekte yer alan paketlerden biri "Imports"
mekanizmayı kullanıyorsa (bu aynı zamanda dosyada gerekli import
veya importFrom
direktifleri gerektirir NAMESPACE
), meseleler iki şekilde iyileştirilebilir. (1) Paket, hangi mgcv
işlevin kullanılacağı üzerinde kontrol sahibi olacaktır . (2) Ana arama yolunu içe aktarılan nesnelerden uzak tutmak, diğer paketin diğer mgcv
işleve olan bağımlılığını potansiyel olarak bozmayacaktır .
Ad alanlarının kullanılmasının bu kadar iyi bir uygulama olmasının nedeni budur, neden şimdi CRAN tarafından uygulanmaktadır ve (özellikle) kullanımın kullanmaktan "Imports"
daha güvenli olmasının nedeni budur "Depends"
.
Önemli bir uyarı eklemek için düzenlendi:
Orada bir yukarıdaki tavsiye maalesef yaygın istisna: paketiniz bir paket dayanıyorsa A
kendisi "Depends"
başka paket üzerinde B
, paketiniz olasılıkla takmak gerekir A
bir ile "Depends
direktifi.
Bunun nedeni , paketteki işlevlerin A
, paket B
ve işlevlerinin search()
yola ekleneceği beklentisiyle yazılmış olmasıdır .
Bir "Depends"
yönerge paketi yükleyecek ve ekleyecektir A
, bu noktada paketin A
kendi "Depends"
yönergesi bir zincirleme reaksiyonda paketin B
yüklenmesine ve eklenmesine neden olacaktır. Paketteki işlevler A
daha sonra B
bağlı oldukları paketteki işlevleri bulabilecekler .
Bir "Imports"
yönerge şekilde yükleyip olacak değil paketini takmak A
ve irade ne yük ne de paketini takmak B
. ( "Imports"
, Sonuçta bu paket yazarlar ad mekanizmasını kullanıyor ve bu paket beklediğini A
kullanıyor olacak "Imports"
herhangi fonksiyonlara noktasına B
. O erişmeleri gerektiğini) paketinde herhangi fonksiyonlara Fonksiyonlarınızdan tarafından Aramalar A
paket işlevleri itimat B
irade sonuç olarak başarısız olur.
Yalnızca iki çözüm şunlardan biridir:
- Paketinizin
A
bir "Depends"
yönerge kullanarak paket eklemesini sağlayın .
- Uzun vadede daha iyi, paketin bakımcısıyla iletişime
A
geçin ve ad alanlarını oluşturmak için daha dikkatli bir iş yapmalarını isteyin ( bu ilgili cevapta Martin Morgan'ın ifadesiyle ).