Вызов метода без параметра self в Perl - PullRequest
0 голосов
/ 26 августа 2018

Я хотел бы знать, возможно ли вызвать метод из объекта без передачи аргумента self.

Например, у меня есть пакет:

package MyPackage;

sub new {
    my $class = shift;
    return bless {}, $class;
}

sub test {
    print("called(" . join(', ', @_) . ")\n");
}

FromСценарий, я вызываю конструктор, а затем метод test:

my $obj = MyPackage->new();
$obj->test("str");

, который дает мне следующий вывод:

called(MyPackage=HASH(0x55b05d481f48), str)

Есть ли способ (даже если это не лучшийпопрактиковаться или использовать некоторые «тайные» особенности языка), чтобы вызвать метод test, используя только ссылку $obj, не передавая параметр «self» неявным образом.

Одним словом, возможно ли это?сделать что-то вроде этого:

$objXXXXtest("str");

с XXXX гипотетической конструкцией и получить called(str) в качестве вывода?

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Это немного неортодоксально, но UNIVERSAL::can возвращает кодовую ссылку, которую вы могли бы вызвать без референта.

$obj->can("test")->("str");
0 голосов
/ 26 августа 2018

Вы бы просто вызвали функцию напрямую, а не как метод объекта:

myPackage::test("str");
...