Perl OOに関しては、正確には何をし->
ますか?
たとえば、メインの呼び出しを行います。
$result = a::b->mymethod( );
を定義するパッケージではmymethod()
、次のものを使用します。
my( $class ) = @_;
主に、私は明らかに に引数を渡さないmymethod()
ので、$class
引数はどこから来ているのでしょうか? 誰かがこれについて良い説明をしたり、これを説明する文書を持っていますか?
Perl OOに関しては、正確には何をし->
ますか?
たとえば、メインの呼び出しを行います。
$result = a::b->mymethod( );
を定義するパッケージではmymethod()
、次のものを使用します。
my( $class ) = @_;
主に、私は明らかに に引数を渡さないmymethod()
ので、$class
引数はどこから来ているのでしょうか? 誰かがこれについて良い説明をしたり、これを説明する文書を持っていますか?
perlobj ドキュメントの「メソッド呼び出し」セクションで説明しています。追加の強調は私のものです。
メソッド呼び出し
さまざまな歴史的およびその他の理由から、Perl はメソッド呼び出しを記述する 2 つの同等の方法を提供します。より簡単で一般的な方法は、矢印表記を使用することです。
my $fred = Critter->find("Fred"); $fred->display("Height", "Weight");
->
参照での演算子の使用については、すでによく知っているはずです。実際、$fred
上記はオブジェクトへの参照であるため、メソッド呼び出しは逆参照の別の形式と考えることができます。参照であろうとクラス名であろうと、矢印の左側にあるものはすべて、最初の引数としてメソッド サブルーチンに渡されます。したがって、上記のコードは次のものとほぼ同等です。
my $fred = Critter::find("Critter", "Fred"); Critter::display($fred, "Height", "Weight");
Perl はサブルーチンがどのパッケージに入っているかをどうやって知るのですか? 矢印の左側を見ると、パッケージ名またはオブジェクトへの参照、つまりパッケージに祝福されたものである必要があります。いずれにせよ、それは Perl が探し始めるパッケージです。そのパッケージにその名前のサブルーチンがない場合、Perl はそのパッケージの基本クラスでそれを探し始めます。
ステートメント:$result = a:b->mymethod( );
は、単一の:
.
正しい形式は次のとおりです。$result = a::b->mymethod( );
->
アロー演算子と呼ばれます。メソッド呼び出しを意味します。メソッド呼び出しの場合、オブジェクトは、最初の要素であることを除いて、(他のパラメーターと同様に)経由で使用できる最初のパラメーターとして暗黙的に渡されます。@_
アロー演算子は、関数/サブルーチン呼び出しとメソッド呼び出しを区別します。
例:
Foo::Bar->method(); # Method call
Foo::Bar::function(); # Function/subroutine call
関数/サブルーチン呼び出しの場合、暗黙の引数は渡されません。
#!/usr/bin/env perl
use strict;
use warnings;
package Foo::Bar;
sub baz {
print 'Arguments: ', scalar @_, "\n";
}
package main;
Foo::Bar::baz;
Foo::Bar->baz;
関係書類:
perldoc perlobj
- Perl オブジェクトperldoc perlboot
- 初心者向けオブジェクト指向チュートリアルperldoc perltoot
- Tom の perl 用オブジェクト指向チュートリアル