私は Moose を初めて使用し、PDL をプロパティとして使用して問題が発生するまでは非常にうまくやっています。オブジェクトをファイルに書き込めるようにしたい (私は を使用しておりuse MooseX::Storage; with Storage('io' => 'StorableFile');
、このオブジェクトはPDL
属性として を持っています。この方法でPDL::IO::Storable
使用するために必要なメソッドを提供しますがStorable
、これを行う方法がわかりませんムース。
これは例です。少し長いことはわかっていますが、できる限り最小限に抑えています。
#!/usr/bin/perl
package LinearPDL;
use Moose;
use PDL::Lite;
use PDL::IO::Storable;
use MooseX::Storage;
with Storage('io' => 'StorableFile');
has 'length' => (is => 'ro', isa => 'Num', required => 1);
has 'divisions' => (is => 'ro', isa => 'Int', required => 1);
has 'linear_pdl' => (is => 'ro', isa => 'PDL', lazy => 1, builder => '_build_pdl');
sub _build_pdl {
my $self = shift;
my $pdl = $self->length() / ( $self->divisions() - 1 ) * PDL::Basic::xvals($self->divisions());
return $pdl;
}
no Moose;
__PACKAGE__->meta->make_immutable;
use strict;
use warnings;
my $linear_pdl = LinearPDL->new('length' => 5, 'divisions' => 10);
print $linear_pdl->linear_pdl;
$linear_pdl->store('file'); # blows up here!
my $loaded_lpdl = load('file');
print $loaded_lpdl->linear_pdl;
PDL 型を作成するか、PDL を何かにラップする必要があるかもしれませんが (を使用してMooseX::NonMoose::InsideOut
)、おそらく誰かがそれから私を救うことができます (または、正しい道があればそれを教えてくれます)。