2009-09-01 10 views
1

これはPerlコンストラクタ呼び出しと同等の関数呼び出しですか?私はこのようなコンストラクタができ

sub create { 
    my $class = shift; 
    my $self = {}; 
    return bless $self,$class; 
} 

を、私は、オブジェクトを作成するとき、私はこれを書くことができます。

my $object = create Object; 

はこれです:

my $object = Object::create("Object"); 

だけ同等にそのコンストラクタ呼び出し?あなたは矢印構文なしcreate機能の完全修飾名を使用する場合は

+1

**。 –

+2

あなたのコンストラクタの名前として 'new'を使用するのは非常に一般的な規約です。ええ、あなたが望むならそれは 'chew_toenail_clippings'と呼ぶことができます。それはうまくいくでしょうが、それはニーモニックではありません。また、あなたはムース(http://moose.perl.org/を)検討したいと思うかもしれ、それは冗長なコードのトンを入力して保存されますPerlのための非常に強力なオブジェクト指向のシステムです(「無糖」の例を参照します。http:/ /search.cpan.org/dist/Moose/lib/Moose/Manual/Unsweetened.pod) – daotoad

答えて

5

いいえ、同等の呼び出しが

my $object = Object->create(); 

である、あなたはPerlのOO方法発送を通過していないので、任意の継承されたメソッドは、意志うまくいかない。

矢印構文は、「間接的」create Object構文よりも好ましいです。理由は、this questionを参照してください。あなたは `

$object
`単にコードブロックの前に4つのスペースを入れて、またはより良いまだそれを選択し、キーを押し** `[Ctrl]キー` ** + ** `[K]を`使用する必要はありません

+0

は、あなたは私のすべての同等の呼び出しを言うことができますか?私はそれぞれの副作用を気にせず、文法だけを気にします。 – Geo

+0

間接的な '新しいObject'と矢印構文は'オブジェクト - > new'私は間接的な形で述べた構文の曖昧さの問題を除いて、等価です。別のパッケージで関数を呼び出す唯一の方法は、完全修飾名を使用することです。現在のパッケージで 'new()'を呼び出すのとまったく同じように動作する 'Object :: new()'です。 – friedo

関連する問題