我只想从PDL中导出pdl()函数,以避免与其他自动导出的函数(如max、median、sum、intersect等)发生名称空间冲突。
use PDL qw(pdl);它不起作用,因为前面提到的函数仍然会被导出(并且我会收到关于函数被重新定义的警告)。
另一方面,如果我这样做
use PDL qw();碰撞不会发生。但是,当我尝试通过PDL::pdl()在程序中使用pdl()函数时,它失败了,并显示以下错误消息:
Can't call method "new" on unblessed reference at Basic/Core/Core.pm.PL (i.e. PDL::Core.pm) line 934.此外,我还尝试了脚本内部
{
require PDL;
pdl();
}我得到了相同的错误信息。
有人能建议我如何才能只导出pdl()吗?谢谢!
发布于 2012-01-26 06:38:54
概要使用PDL;#等同于以下内容:
使用PDL::Core;使用PDL::Ops;使用PDL::Primitive;使用PDL::Ufunc;使用PDL::Basic;使用PDL::Slices;使用PDL::Bad;使用PDL::MatrixOps;使用PDL::Math;使用PDL::Version;使用PDL::IO::Misc;使用PDL::IO::FITS;使用PDL::IO::Pic;使用PDL::IO::Pic;使用PDL::Lvalue;
我猜如果你只导入PDL::Core,你只能得到这个模块中的函数。
发布于 2012-02-14 04:58:43
实际上,我有点惊讶于use PDL qw()做了与use PDL不同的事情。事实上,我不明白它是如何做到的:来自PDL::import的代码没有注意到它的参数。为此创建了一个名为PDL::Lite的不同模块,它相当于:
use PDL::Core '';
use PDL::Ops '';
use PDL::Primitive '';
use PDL::Ufunc '';
use PDL::Basic '';
use PDL::Slices '';
use PDL::Bad '';
use PDL::Version;
use PDL::Lvalue;从通常的use PDL中删除了一些额外的功能,并且没有导入任何函数。(PDL::Lvalue和PDL::Version不会导出任何内容。)
关于您的第二个问题,当您使用use PDL::Lite时,您仍然可以使用PDL->pdl(1, 2, 3)获取pdl构造函数。您不能说PDL::pdl(1, 2, 3),因为构造函数实际上是在PDL::Core包中定义的。去想一想。所以,PDL::Core::pdl(1, 2, 3)做了您想要做的,但不是显而易见的选择。
https://stackoverflow.com/questions/9011232
复制相似问题