"Imports"ปลอดภัยกว่า"Depends"(และทำให้แพ็คเกจที่ใช้เป็น 'พลเมืองที่ดีขึ้น' เมื่อเทียบกับแพ็คเกจอื่น ๆ ที่ใช้งาน"Depends")
"Depends"พยายามสั่งเพื่อให้มั่นใจว่าการทำงานจากแพคเกจอื่นสามารถใช้ได้โดยการติดตั้งแพคเกจอื่น ๆ ไปยังเส้นทางการค้นหาหลัก (เช่นรายการของสภาพแวดล้อมที่ส่งกลับโดยsearch()) อย่างไรก็ตามกลยุทธ์นี้สามารถป้องกันได้หากมีการโหลดแพคเกจอื่นในภายหลังวางฟังก์ชันที่มีชื่อเหมือนกันก่อนหน้านี้บนเส้นทางการค้นหา Chambers ( ใน SoDA ) ใช้ตัวอย่างของฟังก์ชัน"gam"ซึ่งพบได้ทั้งในgamและmgcvแพ็คเกจ หากมีการโหลดแพ็กเกจอื่นสองแพคเกจหนึ่งแพ็กเกจนั้นขึ้นอยู่กับแพ็กเกจที่gamขึ้นอยู่กับmgcvฟังก์ชั่นที่พบโดยการเรียกไปยังgam()จะขึ้นอยู่กับลำดับที่แนบแพ็กเกจทั้งสอง ไม่ดี.
"Imports"สั่งควรจะใช้สำหรับแพคเกจการสนับสนุนใด ๆ ที่มีฟังก์ชั่นจะถูกวางไว้ใน<imports:packageName>(สืบค้นทันทีหลังจาก<namespace:packageName>) แทนในเส้นทางการค้นหาปกติ หากหนึ่งในแพ็กเกจในตัวอย่างด้านบนใช้"Imports"กลไก (ซึ่งจำเป็นต้องมีimportหรือimportFromคำสั่งในNAMESPACEไฟล์) เรื่องต่างๆจะได้รับการปรับปรุงในสองวิธี (1) แพ็คเกจจะได้รับการควบคุมว่าmgcvจะใช้ฟังก์ชันใด (2) โดยการรักษาเส้นทางการค้นหาหลักที่ชัดเจนของวัตถุที่นำเข้ามันจะไม่ได้ทำลายการพึ่งพาแพคเกจอื่น ๆ ในmgcvฟังก์ชั่นอื่น ๆ
นี่คือเหตุผลที่ใช้ namespaces เป็นวิธีที่ดีดังกล่าวว่าทำไมมันจะถูกบังคับใช้ในขณะนี้โดย CRAN และ (โดยเฉพาะอย่างยิ่งใน) ว่าทำไมการใช้จะปลอดภัยกว่าการใช้"Imports""Depends"
แก้ไขเพื่อเพิ่มข้อแม้ที่สำคัญ:
มีข้อยกเว้นอย่างหนึ่งที่พบได้ทั่วไปในคำแนะนำข้างต้น: หากแพ็คเกจของคุณใช้แพ็คเกจAที่"Depends"อยู่ในแพ็คเกจอื่นแพ็คเกจBของคุณอาจจำเป็นต้องแนบมาAพร้อมกับ"Dependsคำสั่ง
เพราะนี่คือฟังก์ชั่นในแพคเกจAที่ถูกเขียนขึ้นด้วยความคาดหวังว่าแพคเกจBและหน้าที่ของตนจะได้รับการติดอยู่กับsearch()เส้นทาง
"Depends"สั่งจะโหลดและแนบแพคเกจAที่จุดแพคเกจAของตัวเอง"Depends"สั่งจะในปฏิกิริยาลูกโซ่, แพคเกจสาเหตุBที่จะโหลดและติดอยู่เช่นกัน ฟังก์ชั่นในแพ็คเกจAจะสามารถค้นหาฟังก์ชั่นในแพ็คเกจBที่พวกเขาพึ่งพาได้
"Imports"สั่งจะโหลด แต่ไม่ได้แนบแพคเกจAและจะไม่โหลดมิได้Bแนบแพคเกจ ( "Imports"หลังจากทั้งหมดคาดว่านักเขียนแพคเกจที่มีการใช้กลไก namespace และแพคเกจที่Aจะใช้"Imports"ในการชี้ไปที่ฟังก์ชั่นใด ๆ ในBการที่จะต้องเข้าถึง.) โทรโดยฟังก์ชั่นของคุณเพื่อฟังก์ชั่นใด ๆ ในแพคเกจAที่พึ่งพาฟังก์ชั่นในแพคเกจBประสงค์ จึงล้มเหลว
โซลูชันที่สองเท่านั้นคือ:
- ให้แพ็คเกจของคุณแนบแพ็คเกจ
Aโดยใช้"Depends"คำสั่ง
- ดีกว่าในระยะยาวติดต่อผู้ดูแลบรรจุภัณฑ์
Aและขอให้พวกเขาทำงานอย่างระมัดระวังมากขึ้นในการสร้างเนมสเปซของพวกเขา (ในคำพูดของ Martin Morgan ในคำตอบที่เกี่ยวข้องนี้ )