Perlについての質問箱 39箱目at TECH
Perlについての質問箱 39箱目 - 暇つぶし2ch207:1/2
09/03/03 17:18:15
$iがゴニョゴニョとか$_って何よ?とかあるが…それを差し引いて
どのレベルでのカプセル化を言っとるんだ?
その例だと、呼出元にて、$obj->{obj_num} = 10 ; とかしてobj_numに
直接代入可能だから、その点ではカプセル化されたとは言えん。
只、編集とか継承とかしない限りにおいて、$ch{$obj->{obj_num}} には
アクセス出来ん事だけは確かだ。ゲッタねえし。

インサイドアウトオブジェクトレベルの意味ならば以下に簡単な例。
Hoge2は(恐らく)貴方の目指してた物をインサイドアウトで実現してる。
new時に投入した'hoge'がアクセサを介さず変えられるか?がポイント。

package Hoge; #=== カプセル前 ===
sub new { bless { data => pop }, shift ; }
sub setter { shift->{data} = pop ; return ; }
sub getter { shift->{data} }
1;
package Hoge2; #=== カプセル後 ===
use Scalar::Util qw(refaddr) ;
my %hash ;
sub new { my $obj = bless \do{''}, shift ; $hash{ refaddr $obj } = shift ; $obj ;}
sub getter { $hash{ refaddr shift} ; }
sub setter { $hash{ refaddr shift} = pop ; return ; }
sub DESTROY { delete $hash{ refaddr shift } ; }
1;



次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch