0

、、などの他の自動的にエクスポートされた関数との名前空間の衝突を避けるために、pdl()からの関数のみをエクスポートしたいのですが、PDLmaxmediansumintersect

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何もエクスポートしないでください。)

2番目の質問に移りますが、あなたがそうするとき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 に答える