FC2ブログ
2009
01.29

Class::Accessor

Category: perl
ほんと便利ですね。
ちょー重宝しています。


http://search.cpan.org/~kasei/Class-Accessor-0.31/lib/Class/Accessor.pm


で、まぁ例によって、今更↑のページを必死こいて読みました。

使い方はこんな感じ:

package Hoge;
use strict;
use base qw(Class::Accessor);
Hoge->mk_ro_accessors(qw(neko));
1;



スクリプト側ではこんな風に。neko に 値を入れる場合は

use Hoge;
use strict;
my $hoge = Hoge->new({neko=>'猫'});


とか

use Hoge;
use strict;
my $hoge = Hoge->new();
$hoge->set('neko' , "猫");


とか書けます。

取り出すときは、

$hoge->get('neko');


としてやります。

しかし、こんな書き方いやだーと言った人がいたのかは分かりませんが、
モジュールをちょっといぢるとこんな風にもできます。

package Hoge;
use strict;
use base qw(Class::Accessor);
__PACKAGE__->follow_best_practice;
Hoge->mk_accessors(qw(neko));



use Hoge;
use strict;
my $hoge = Hoge->new();
$neko = $hoge->get_neko;


のように書けるようになりますが、

$hoge->neko();


の書式は

Can't locate object method "neko" via package "Hoge" at hoge.pl line XX.


のようなエラーが出て使えなくなります。

mk_accesorは、read only と write only が指定できます。
read only は

Hoge->mk_ro_accessors(qw(neko));


new するときに、
Hoge->new({neko=>'猫'});
と指定すれば、今後、値を変更することはできません。

write only は

Hoge->mk_wo_accessors(qw(neko));


と書きます。

$hoge->set_neko("猫");
$hoge->get_neko;


getするとエラーになります。

Can't locate object method "get_neko" via package "Hoge" at hoge.pl line XX.


ですが。

なんですが。

うん、私もこれを見た瞬間、思いました。

何に使うんだ?

と。

NOTE I'm not entirely sure why this is useful, but I'm sure someone will need it.



使いどころわかんねけど、誰か必要としてる!

If you've found a use, let me know.



使い方わかったら教えてね!

[てきとー訳]


って、しっかり書いてあったりします。

うーん、いいんかこんなので(笑)



でもさ

モジュールにこんなコードを足します。

sub test{
my $self = shift;
$self->set_neko('ぬこ');
print $self->{neko};
}


$hoge->test();ってやってみると分かるけど、
getter から取得できないだけで、やろうと思えばできるんですよね。

Dumperすると、

$VAR1 = bless( {
'neko' => 'ぬこ'
}, 'Hoge' );


となって、ちゃんと入ってるわけで。

ほんとに存在意義が…。
getする部分のサブルーチンがいらないから少し軽くなるとかいう記述も見かけたんですが、そんな程度だったら別に…。そんなん気にするなら、Class::Accesor使うなと思ってしまいます。







結論:
気にしない。









スポンサーサイト




トラックバックURL
http://noriko3.blog42.fc2.com/tb.php/160-b4c461e3
トラックバック
コメント
管理者にだけ表示を許可する
 
back-to-top