2

Perl OOに関しては、正確には何をし->ますか?

たとえば、メインの呼び出しを行います。

$result = a::b->mymethod( );

を定義するパッケージではmymethod()、次のものを使用します。

    my( $class ) = @_;

主に、私は明らかに に引数を渡さないmymethod()ので、$class引数はどこから来ているのでしょうか? 誰かがこれについて良い説明をしたり、これを説明する文書を持っていますか?

4

2 に答える 2

8

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 はそのパッケージの基本クラスでそれを探し始めます。

于 2012-05-28T12:05:15.860 に答える
3

ステートメント:$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;

関係書類:

于 2012-05-28T11:51:48.470 に答える