首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅从perl PDL中导出pdl()

仅从perl PDL中导出pdl()
EN

Stack Overflow用户
提问于 2012-01-26 06:18:55
回答 2查看 153关注 0票数 0

我只想从PDL中导出pdl()函数,以避免与其他自动导出的函数(如maxmediansumintersect等)发生名称空间冲突。

代码语言:javascript
复制
use PDL qw(pdl);

它不起作用,因为前面提到的函数仍然会被导出(并且我会收到关于函数被重新定义的警告)。

另一方面,如果我这样做

代码语言:javascript
复制
use PDL qw();

碰撞不会发生。但是,当我尝试通过PDL::pdl()在程序中使用pdl()函数时,它失败了,并显示以下错误消息:

代码语言:javascript
复制
Can't call method "new" on unblessed reference at Basic/Core/Core.pm.PL (i.e. PDL::Core.pm) line 934.

此外,我还尝试了脚本内部

代码语言:javascript
复制
{
     require PDL;
     pdl();
}

我得到了相同的错误信息。

有人能建议我如何才能只导出pdl()吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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,你只能得到这个模块中的函数。

票数 1
EN

Stack Overflow用户

发布于 2012-02-14 04:58:43

实际上,我有点惊讶于use PDL qw()做了与use PDL不同的事情。事实上,我不明白它是如何做到的:来自PDL::import的代码没有注意到它的参数。为此创建了一个名为PDL::Lite的不同模块,它相当于:

代码语言:javascript
复制
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::LvaluePDL::Version不会导出任何内容。)

关于您的第二个问题,当您使用use PDL::Lite时,您仍然可以使用PDL->pdl(1, 2, 3)获取pdl构造函数。您不能说PDL::pdl(1, 2, 3),因为构造函数实际上是在PDL::Core包中定义的。去想一想。所以,PDL::Core::pdl(1, 2, 3)做了您想要做的,但不是显而易见的选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9011232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档