Как я перечисляю доступные методы на данном объекте или пакете в Perl?

Простое решение в Python3 +:

import time


todaysdate = time.strftime("%d/%m/%Y")

#with '.' isntead of '/'
todaysdate = time.strftime("%d.%m.%Y")
40
задан brian d foy 26 May 2009 в 15:18
поделиться

4 ответа

Если у вас есть пакет с именем Foo , это должно сделать это:

no strict 'refs';
for(keys %Foo::) { # All the symbols in Foo's symbol table
  print "$_\n" if exists &{"Foo::$_"}; # check if symbol is method
}
use strict 'refs';

В качестве альтернативы, чтобы получить список всех методов в пакете Foo :

no strict 'refs';
my @methods = grep { defined &{"Foo::$_"} } keys %Foo::;
use strict 'refs';
21
ответ дан 27 November 2019 в 01:36
поделиться

Есть (даже слишком) много способов сделать это в Perl, потому что в Perl есть очень много способов делать что-то. Как кто-то прокомментировал, автоматически загружаемые методы всегда будут немного сложными. Однако вместо того, чтобы использовать свой собственный подход, я бы посоветовал вам взглянуть на Class :: Inspector на CPAN. Это позволит вам сделать что-то вроде:

my $methods =   Class::Inspector->methods( 'Foo::Class', 'full', 'public' );
38
ответ дан 27 November 2019 в 01:36
поделиться

если у вас есть пакет, использующий Moose , это достаточно просто:

print PackageNameHere->meta->dump;

И для более полных данных:

use Data::Dumper;
print Dumper( PackageNameHere->meta ); 

С чего начать. Для всего остального есть методы, которые появляются в -> meta , которые описаны в Class :: MOP :: Class

. Вы можете немного подделать AdHoc доброту лося для пакетов без введите:

use Class::MOP::Class;
my $meta = Class::MOP::Class->initialize( PackageNameHere );

, а затем перейдите к использованию методов Class :: MOP, как если бы вы использовали Moose.

Для начала:

 $meta->get_method_map(); 

используйте Moose; #, его потрясающе .

12
ответ дан 27 November 2019 в 01:36
поделиться

В общем, вы не можете сделать это с помощью динамического языка, такого как Perl. Пакет может определять некоторые методы, которые вы можете найти, но он также может создавать методы на лету, у которых нет определений, пока вы их не используете. Кроме того, даже вызов метода (который работает) может не определить его. Это то, что делает динамические языки прекрасными. :)

Какую задачу вы пытаетесь решить?

3
ответ дан 27 November 2019 в 01:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: