Сохранение ссылки на объект в значении хэш-ключа (в разностном классе) и для вызова метода - PullRequest
0 голосов
/ 31 декабря 2018
filename : Frames.pm

Ниже класса, если тот, который содержит / предоставляет метод для конечного пользователя.

BEGIN
{
          require Exporter;
          our @ISA = qw(Exporter);
          our @EXPORT_OK =  qw();
          our @EXPORT =  qw(print_me);

 }

 package Frames;

 sub new
 {
     my ($clsname,$self) = @_;
     $self = {};
     bless $self,$clsname;
     return $self;
 }

 sub print_me
 { 
      print "Testing my Frame Object Reference call";
 } 

  1;

 Filename = Testing.pm

Этот класс является тем, который содержит ссылку на объект класса кадра в паре значений ключа хеш-функции.Я пытался вызвать methof на основе этого хеш-значения.

 package Test;

 sub new
 {
        my ($clsname,$frame_ref) = @_;
        my $self = { frame => $frame_ref };   
        # here storing frame     reference as value not key
        bless $self,$clsname;
        return $self;
 }

 sub test_call
 {
        my ($self) = shift;
        ## invoking object reference based method

        %{$self->{frame}}->print_me;

        ## Above method call is failing
  }

  Filename Test.pl

  use Frames;

  my $frobj = Frames->new;
  my $testobj = Test->new($frobj); 
  # Frame object passed

  $testobj->test_call;

Frames - это класс, который содержит / предоставляет некоторый метод. Test - это класс, который содержит объект фрейма, который я искал, чтобы вызвать этот объект фрейма.через тестовый класс.

1 Ответ

0 голосов
/ 31 декабря 2018

Ты слишком стараешься.Левая часть -> должна быть ссылкой на объект, и вы сохранили эту ссылку в $self->{frame} (не %{$self->{frame}}).

sub test_call
{
    my ($self) = shift;
    ## invoking object reference based method

    $self->{frame}->print_me;

    ## Above method call will now work.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...