Perl: какой тип должен использоваться для объекта класса в функции «validate» - PullRequest
0 голосов
/ 21 декабря 2010

Я хочу передать ссылку на объект класса с именем "A" в конструкторе.И используйте функцию «проверить», чтобы проверить это.

примерно так:

test1.pm

my $object = Object1->new;

my $newObject = Object2->new({
    param1 => $object,
});

test2.pm

sub new {
    my $class = shift;

    my (%options) = validate (@_, {
        param1 => { type => SCALARREF, default => undef},
    });
    ...
}

Проблема, в которой я не уверен относительно типапараметра param1.Я пробовал "OBJECT" и "SCALARREF", но были такие ошибки, как "SCALARREF не разрешен при строгой подпрограмме".

Какой тип следует использовать?

1 Ответ

2 голосов
/ 21 декабря 2010

Похоже, вы пытаетесь сделать квази-Moose вещь здесь. Но в Moose вы не создаете new сабов, потому что Moose делает это за вас. Если вам что-то нужно - вы создаете подпункт BUILD.

Базовая объектная система Perl (5) не работает как Moose, поэтому 'SCALARREF' или что-то еще, что вы делаете в базовой Perl.

  • Понимаете ли вы, что вы передаете хэш-адрес new?
  • Вы понимаете, что vaildate получает два хеш-кода?
    validate( {}, {} )

И если SCALARREF не был определен, это всегда будет голое слово.

Читать на Moose. Вы можете начать с Moose Types Manual , чтобы увидеть, как используется ScalarRef, но, поскольку вы даже не показываете "use Moose", вам следует начать со страницы 1 Manual. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...