(再)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.
えーと、自分は他所で良く、「オブジェクト指向信者」と、
からかい半分で良くいわれます。つまり嫌がられている(笑)。
ですので、オブジェクト指向言及の場以外では、それの発言は
しないように心掛けています。どうか煙たがらずに、御教授を願いたいです。

[上に] [前に] [次に]