5 Stimmen

Wie kann ich Methoden für eine gebundene Variable aufrufen?

Ich habe gerade erst begonnen, etwas über Krawatte . Ich habe eine Klasse mit dem Namen Link, mit der ich Folgendes tun möchte:

  • wenn abgerufen, Rückgabe der Adresse des Links
  • falls gespeichert, die neue Adresse speichern
  • in der Lage sein, Methoden aufzurufen

Bis jetzt ist mein Code :

package Link;

sub FETCH {
    my $this = shift;
    return $this->{"site"};
}

sub STORE {
    my ($self,$site) = @_;
    $self->{"site"}   = $site;
}

sub print_method {
    my $self = shift;
    print $self->{"site"};
}

sub TIESCALAR {
    my $class = shift;
    my $link  = shift;
    my $this  = {};
    bless($this,$class);
    $this->{"site"} = $link;
    return $this;
}

1;

Und der Code, den ich verwende, um die Funktionalität zu überprüfen, lautet:

use Link;

tie my $var,"Link","http://somesite.com";
$var->print_method;

Wenn es ausgeführt wird, bricht das Skript mit der folgenden Fehlermeldung ab: Die Methode "print_method" kann nicht ohne Paket- oder Objektreferenz in tietest.pl Zeile 4 aufgerufen werden. .

Wenn ich seine Botschaft richtig verstehe, $var->print_method in eine Zeichenkette auflöst, auf die die Methode print_method genannt wird. Wie könnte ich von Krawatte profitieren, aber auch die Variable als ein Objekt verwenden?

EDIT: nach dem Experimentieren ein bisschen, fand ich heraus, dass, wenn ich $self auf Fetch zurückgeben, ich die Methoden aufrufen kann, jedoch Fetch wird nicht die Adresse zurückgeben.

EDIT 2: Die Perl-Mönche haben mir die Lösung geliefert: gebunden . tied gibt einen Verweis auf das Objekt VARIABLE zurück.

Durch die Kombination mit meinen Methoden, kann ich alles erreichen, was ich wollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X