2012-01-25 41 views
0

我只想導出從PDLpdl()功能,以避免與其他自動導出功能,如maxmediansumintersect等命名空間衝突。然而,當我試圖出口PDL()PDL

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()嗎?謝謝!

回答

1

SYNOPSIS 使用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 ::核心,你會在此模塊中只得到功能。

+1

不,不要只導入PDL :: Core。這些模塊中的很多都假設其他模塊已加載,因此您必須使用「使用PDL」來完成整個過程。 –

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::LvaluePDL::Version沒有出口任何東西。)

在你的第二個問題,當你use PDL::Lite,你仍然可以得到在pdl構造與PDL->pdl(1, 2, 3)。你不能說PDL::pdl(1, 2, 3),因爲構造函數實際上是在PDL::Core包中定義的。去搞清楚。所以,PDL::Core::pdl(1, 2, 3)做你的意思,但不是明顯的選擇。