Previous: Contributed packages and CRAN, Up: Packages



13.3 命名空間

包有自己的命名空間(namespaces),並且現在所有基本的和推薦的 的包都依賴于包 datasets。命名空間主要三個作用: 它們允許包的作者隱藏函數和資料,即只允許內部用戶使用, 它們防止函數在一個用戶(或其他包的作者)使用 相同名字時被破壞,它們提供了一種 訪問特定包的 某個物件的方法。

例如,t() 是 R 裏面的轉置函數,但是用戶 可能會定義一個函數叫 t。命名空間 防止用戶定義的函數居先和破壞 矩陣轉置的函數。

有兩個操作符和命名空間相關。雙冒號操作符 :: 選擇一個特定命名空間得到的函數定義。 在上面的例子中,轉置函數總是可以通過 base::t 使用,因為它是在包 base 中定義的。 一個包中的函數可以通過這種方式 訪問。

三冒號操作符 ::: 可能會出現在一些 R 代碼中: 它有點像雙冒號操作符,但可以訪問隱藏物件。 用戶還可能使用函數 getAnywhere(), 它會搜索多重包。

包常常是包之間依賴的(inter-dependent),載入其中一個可能會引起其他包 的自動載入。上面提到的冒號操作符同樣會引起 相關包的自動載入。當有命名空間的包自動載入時, 它們不會被自動加入 搜索列表。