0

我只想导出pdl()函数PDL以避免命名空间与其他自动导出的函数(如maxmediansum等)发生冲突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() 吗?谢谢!

4

2 回答 2

2

我实际上有点惊讶于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->pdl(1, 2, 3). 你不能说PDL::pdl(1, 2, 3),因为构造函数实际上是在PDL::Core包中定义的。去搞清楚。所以,PDL::Core::pdl(1, 2, 3)你的意思是,但不是显而易见的选择。

于 2012-02-13T20:58:42.503 回答
1

概要使用 PDL;# 等价于以下内容:

   use PDL::Core;
   use PDL::Ops;
   use PDL::Primitive;
   use PDL::Ufunc;
   use PDL::Basic;
   use PDL::Slices;
   use PDL::Bad;
   use PDL::MatrixOps;
   use PDL::Math;
   use PDL::Version;
   use PDL::IO::Misc;
   use PDL::IO::FITS;
   use PDL::IO::Pic;
   use PDL::Lvalue;

我想如果你只导入 PDL::Core,你只会得到这个模块中的函数。

于 2012-01-25T22:38:54.003 回答