Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R在代码完成中建模命名空间-或如何组织R代码_R_Namespaces_Code Completion_Tab Completion - Fatal编程技术网

使用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,因为看起来你基本上只是试图在一堆不同类型的对象上调用情节。