私は自分自身にMooseを教えるために、特定のハードウェアに接続するMooseオブジェクトに取り組んでいます。PROPERTYNAME=VALUE
上記のハードウェアは、ハードウェアのさまざまなプロパティ、セッターおよびゲッターのすべての形式を設定するさまざまなコマンドを取りますPROPERTYNAME?
(これらの「セッター」および「ゲッター」はハードウェアへのネットワークインターフェイス上にあることに注意してください)。私がやりたいのは、ハードウェアのこれらすべてのプロパティが属性のようなインターフェイスで実装されているオブジェクトを作成することです。さまざまなプロパティの取得と設定はすべてのプロパティで同じ形式になるので、それらのプロパティのリストからセッターとゲッターを自動的に生成する方法はありますか?
IE:これではなく:
Package MyHardware;
use Moose;
has property1 => (
'is' => 'rw',
'reader' => 'set_property1',
'writer' => 'get_property1',
);
has property2 => (
'is' => 'rw',
'reader' => 'set_property2',
'writer' => 'get_property2',
);
# ...
has propertyN => (
'is' => 'rw',
'reader' => 'set_propertyN',
'writer' => 'get_propertyN',
);
私がこのようにできることはありますか?
Package MyHardware;
use Moose;
attributes => (
'is' => 'rw',
'names' => [qw/property1 property2 ... propertyN/],
'reader' => sub {
my $self = shift;
my $property = shift;
return $self->_send_command("$property?");
},
'writer' => sub {
my $self = shift;
my $property = shift;
my $value = shift;
return $self->_send_command("$property=$value");
},
);
編集:これが私が起こりたいことです:
# CALLER:
my $hw = MyHardware->new();
$hw->property1('foo');
print $hw->property2 . "\n";
そして「ボンネットの下」:
$hw->property1('foo');
# Becomes
sub { return $hw->_send_command('property1=foo'); }
# And
$hw->property2();
# Becomes
sub { return $hw->_send_command('property2?'); }