Có thể nhận tất cả các phương thức hợp lệ cho một lớp Perl cụ thể không?Có thể nhận tất cả các phương thức hợp lệ cho một lớp Perl cụ thể không?
Tôi đang cố gắng thao tác bảng biểu tượng của một lớp và nhận tất cả các phương pháp của nó. Tôi tìm thấy tôi có thể tách ra các chương trình con từ các chương trình con không thông qua các $obj->can($method)
, nhưng điều đó không làm chính xác những gì tôi nghĩ rằng nó.
Lợi nhuận sau:
subroutine, Property, croak, Group, confess, carp, File
Tuy nhiên, subroutine
không phải là một phương pháp, (chỉ là một chương trình con), và croak
, confess
và đều được nhập khẩu vào gói của tôi.
Những gì tôi thực sự muốn in ra là:
Property,Group, File
Nhưng tôi sẽ thực hiện:
subroutine, Property,Group, File
Dưới đây là chương trình của tôi:
#! /usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
my $sections = Section_group->new;
say join ", ", $sections->Sections;
package Section_group;
use Carp;
sub new {
return bless {}, shift;
}
sub Add {
my $self = shift;
my $section = shift;
}
sub Sections {
my $self = shift;
my @sections;
for my $symbol (keys %Section_group::) {
next if $symbol eq "new"; # This is a constructor
next if $symbol eq "Add"; # Not interested in this method
next if $symbol eq "Sections"; # This is it's own method
push @sections, $symbol if $self->can($symbol);
}
return wantarray ? @sections : \@sections;
}
sub subroutine {
my $param1 = shift;
my $param2 = shift;
}
sub Group {
my $self = shift;
my $section = shift;
}
sub File {
my $self = shift;
my $section = shift;
}
sub Property {
my $self = shift;
my $section = shift;
}
Sau đó, một lần nữa, đôi khi mọi người thực sự nhập phương thức từ gói khác (ví dụ: 'sử dụng Xuất khẩu 'nhập';' trái với '@ISA = qw (Nhà xuất khẩu);'). – cjm
@cjm Tất nhiên, nhưng tôi đoán điều này không xảy ra thường xuyên, và thậm chí có thể là một hình mẫu. Hy vọng rằng, hầu hết mọi người có tinh thần tách rời lập trình thủ tục (với nhập khẩu) từ OOP (mà giải quyết nhiều vấn đề không gian tên). Không có cách nào để biết nếu một phụ nhập khẩu có nghĩa là một phương pháp, do đó, điều này sẽ phải là đủ tốt. (Đợi đã, có lẽ nếu chúng ta có thể truy cập thuộc tính ': method'…) – amon
_Đây là khá tầm thường_. Không đáng kể? Bạn xây dựng máy phát điện tachyon vào cuối tuần? Perldoc trên ** svref_2object **: _Sẽ tham chiếu đến bất kỳ giá trị Perl nào và chuyển giá trị được gọi vào một đối tượng trong lớp B :: OP có nguồn gốc thích hợp hoặc B :: SV. Tôi không biết nó đang nói về. Tuy nhiên, nó hoạt động. Tôi đoán đã đến lúc tôi phải đi sâu vào những điều chưa được cải thiện trước đó và cải thiện trò chơi Perl của tôi nhiều hơn một chút. Hoặc là, hoặc học Python. –