(再)Perl5 クラスメソッドの引数の使い方
[上に]
[前に]
[次に]
J.Naka
[E-Mail]
[HomePage]
1999/07/08(木) 21:10:44
すいません、コード書きますので、添削をできたらお願いします(_ _)
以下は、パッケージ Critterをクラスとして、
Constructorの sub new または sub new1 にてInstanceを生成し、
メソッド PutTest を起動させるものです。
質問項目として、
1.メソッドに引数が旨く渡りません。
2.Constructorとしては、new new1 どちらが妥当でしょうか?
どちらも結果しては同じような気もします。
^--ooTest.pl (クラス定義) ----
package Critter;
sub new ($oberf)
{
local(*oberf) =\(@_);
$oberf = {};
bless $oberf;
return;
}
sub new1
{
my $oberf = {};
bless $oberf;
return($oberf);
}
sub PutTest($Arg0)
{
print "$_[0] OK!\n";
return;
}
1;
$--------
^--メインモジュール ----
require "ooTest.pl";
Critter::new($tt);
$tt1 = Critter::new1();
$aa = "22";
Critter::GetName($aa);
$tt -> GetName($aa);
$tt1 -> GetName('22');
exit(0);
$--------
^-- リザルト --
22 OK!
Critter=HASH(0xb76058) OK!
Critter=HASH(0xb760a0) OK!
$--------
全リザルトが 22 OK! となって欲しいのですが。
B-Cus
1999/07/09(金) 18:17:49
青ラクダ本 P.336 「5.3.5.2 インスタンスメソッド」より引用。
インスタンスメソッドは、第一引数として、オブジェクトリファレンスを
受け取る。インスタンスメソッドでは、最初の引数をシフトしてプライ
ベート変数に代入して、それを通常のリファレンスとして使用するという
手順を踏むのが普通である。
素人なら手取り足取り教えるけど、あなたはそうじゃないから
あえてこういう風にいいますが、おそらく僕がこのレスを付けなくても、
数日すればあなたは正解にたどり着いていたでしょう(あるいはもうたどり
着いているかもしれない)。もう少し粘り強く本を読むことをお勧めします。
J.Naka
[E-Mail]
1999/07/10(土) 19:56:18
[[解決]]
Re:B-Cusさん
ども、解答でなく、解答への示唆ありがとうさんです。
取りあえず、手当たり次第思いつくままにコード試してたら
メソッドに引数が渡りました。
>インスタンスメソッドでは、最初の引数をシフトしてプライ
>ベート変数に代入して、それを通常のリファレンスとして使用するという
>手順を踏むのが普通である。
ラクダ本の上の該当記事は読んでましたが、
1.最初の引数は誰が何処でセットするのか?
2.引数をシフトするのは誰が何処でするのか?
3.通常のリファレンスとして使用するのは誰か?
これの、具体的コード及び解説は自分の読解内ではありませんでした。
メソッドのコード例はあるのですが、そのメソッドを呼ぶコード例がなく、
上記の解は推測するしかないみたい。
で、試行錯誤の末に、
1は、Perlシステムが言語機構として隠れて実行(自動実行)。
2は、メソッド内での引数シフトはユーザが明示的な
コードを書かなければいけない。
3は、Perlが言語機構として隠れて実行。
と、言う事のようです。(違ってるかな?)
最初の引数はPerl自身が使うものでユーザが直接使う局面というのは無いか
少ないと、ならば1から3全てPerlの言語仕様の振る舞いであり、それの
部分をユーザーがコードとして明示的に書かなければならないのは、変。
全部でなく、部分というのも混乱に拍車を掛けているような気がします。
---------------------------
>素人なら手取り足取り教えるけど、あなたはそうじゃないから
ギクっ(^^; 調子の良い時に素人で無いと言われると、(^-^)へへへん。
と鼻が高くなるのですが(笑)、調子の悪い時はやっぱし素人のアマチュア
だなぁと、限界を感じます(^^;
>もう少し粘り強く本を読むことをお勧めします。
はい、ほんとうにその通りなんですよ(^^;
一旦勘違いするとなかなか軌道修正がままならない。(^^;
有り難う御座いました(_ _) 今後も宜しくお願いいたします。m(_ _)m
P.S.
えーと、自分は他所で良く、「オブジェクト指向信者」と、
からかい半分で良くいわれます。つまり嫌がられている(笑)。
ですので、オブジェクト指向言及の場以外では、それの発言は
しないように心掛けています。どうか煙たがらずに、御教授を願いたいです。
[上に]
[前に]
[次に]