使用R在代码完成中建模命名空间-或如何组织R代码
这更像是一个一般的代码结构问题 目前,我试图将代码写入“名称空间”。例如,我会:使用R在代码完成中建模命名空间-或如何组织R代码,r,namespaces,code-completion,tab-completion,R,Namespaces,Code Completion,Tab Completion,这更像是一个一般的代码结构问题 目前,我试图将代码写入“名称空间”。例如,我会: Mine.FancyPlot.Plot(...) Mine.FancyPlot.Impl.PlotCanvas(...) Mine.FancyPlot.Impl.PlotLegend(...) Mine.BasicPlot.Plot(...) Mine.BasicPlot.Impl.PlotCanvas(...) Mine.BasicPlot.Impl.PlotLegend(...) Mine.BasicPlot.
Mine.FancyPlot.Plot(...)
Mine.FancyPlot.Impl.PlotCanvas(...)
Mine.FancyPlot.Impl.PlotLegend(...)
Mine.BasicPlot.Plot(...)
Mine.BasicPlot.Impl.PlotCanvas(...)
Mine.BasicPlot.Impl.PlotLegend(...)
Mine.BasicPlot.Impl.PlotLines(...)
我的想法是,我试图将“私有”函数隐藏在“Impl”for实现名称空间中。所以在Mine\u FancyPlot.R
之外,我不会调用Mine.FancyPlot.Impl
函数
这种方法工作得相当好,除了代码完成不如它可能的好
首先,当我键入Mine.BasicPlot.
并点击TAB
时,我得到了所有函数,包括Impl
函数,因为I
在p
之前,它们甚至隐藏了“公共”用户函数
所以我开始把结构改成
MyPub.FancyPlot.Plot(...)
MyPriv.FancyPlot.PlotCanvas(...)
MyPriv.FancyPlot.PlotLegend(...)
MyPub.BasicPlot.Plot(...)
MyPriv.Mine.BasicPlot.PlotCanvas(...)
MyPriv.Mine.BasicPlot.PlotLegend(...)
MyPriv.Mine.BasicPlot.PlotLines(...)
这在不再预测“私有”函数的情况下效果更好。然而,我仍然有一个问题,如果我键入MyPub.
并点击选项卡
,我实际上看不到所有不同的“名称空间”(如我在Java
,C++
,…),而是在第一个“名称空间”中开始的一长串函数
理想情况下,我希望在R
中完成代码以在下一点切断所有预测,并对它们进行唯一化,因此理想情况下,当我键入MyPub.
并点击选项卡时,我只会在MyPub
中获得“子名称空间”和函数的列表
这可能吗?是否可以修改代码预测以反映这种行为?或者有更好的方法来实现我的目标吗? < P>你应该考虑把你的功能放在一个包中组织起来。未导出的函数只能通过执行“package:::functionNotExported”来访问,并且仅执行“functionNotExpo[tab]”时不会列出
例如,请参见将您使用的函数放入一个包中可能会更容易。然后,您可以导出希望用户能够访问的功能。如果你的函数是一个类的成员,你可以使用.DollarNames为它们编写定制的补全。DollarNamesYou也可以考虑使用S3类的JRES,因为看起来你基本上只是试图在一堆不同类型的对象上调用情节。