2017-12-22 97 views
5

Có cách nào để khai báo vùng tên và xuất một hàm vào không gian tên sao cho nó có thể được truy cập bằng cách sử dụng ::, mà không cần tạo toàn bộ gói?Làm thế nào để tạo ra một không gian tên và xuất khẩu một chức năng vào nó?

Các công trình sau đây cho ::: nhưng không :::

ns <- namespace::makeNamespace("my_namespace") 
assign("test",7, env=ns) 
my_namespace:::test # Triple colon - works. 
# [1] 7 
my_namespace::test # Double colon - doesn't work. 
# Error: 'test' is not an exported object from 'namespace:my_namespace' 

Có một thay thế cho assign đó sẽ làm cho công việc dòng cuối cùng? (Mục tiêu là để có thể mô phỏng một gói trong khi phát triển nó, vì vậy các tệp khác có thể sử dụng nó như thể nó là một gói hoàn chỉnh nhưng nó có thể được tải lại nhanh chóng bằng cách sử dụng source thay vì devtools::install.)

+1

Xin cho biết cho dù bạn đang sử dụng các gói cơ sở phi. Không thể tìm thấy hàm 'makeNamespace'. – nicola

+0

@nicola Xin lỗi - đó là không gian tên :: makeNamespace. Tôi đã chỉnh sửa câu hỏi. – apc53c

Trả lời

2

base::namespaceExport(ns, ls(ns)) dường như hoạt động (tất nhiên bạn cũng có thể sử dụng tập hợp con làm danh sách đối tượng cần xuất trong đối số thứ hai). Sử dụng nó một khi bạn đã xác định tất cả các đối tượng trong không gian tên mà bạn muốn xuất khẩu:

ns <- namespace::makeNamespace("my_namespace") 
assign("test", 7, env = ns) 
base::namespaceExport(ns, ls(ns)) 

my_namespace::test 

Output:

7 
Các vấn đề liên quan