tôi viết Lớp Perl sau:Trong Perl, làm cách nào để chuyển một hàm làm đối số của một hàm khác?
package Menu;
use strict;
my @MENU_ITEMS;
my $HEADER = "Pick one of the options below\n";
my $INPUT_REQUEST = "Type your selection: ";
sub new {
my $self = {};
$self->{ITEM} = undef;
$self->{HEADER} = undef;
$self->{INPUT_REQUEST} = undef;
bless($self);
return $self;
}
sub setHeader {
my $self = shift;
if(@_) { $self->{HEADER} = shift }
$HEADER = $self->{HEADER}."\n";
}
sub setInputRequest {
my $self = shift;
if(@_) { $self->{INPUT_REQUEST} = shift }
$INPUT_REQUEST = $self->{INPUT_REQUEST}." ";
}
sub addItem {
my $self = shift;
if(@_) { $self->{ITEM} = shift }
push(@MENU_ITEMS, $self->{ITEM});
}
sub getMenu {
my $formatted_menu .= $HEADER;
my $it=1;
foreach(@MENU_ITEMS) {
$formatted_menu.=$it.". ".$_."\n";
$it++
}
$formatted_menu.=$INPUT_REQUEST;
return $formatted_menu;
}
1;
Nếu tôi gọi là kịch bản perl sau:
#!/usr/bin/perl
use strict;
use Menu;
my $menu = Menu->new();
$menu->addItem("First Option");
$menu->addItem("Second Option");
print $menu->getMenu;
tôi sẽ nhận được kết quả như sau:
Pick one of the options below
1. First Option
2. Second Option
Type your selection:
Tôi muốn để sửa đổi lớp đã cho theo cách mà tôi có thể chuyển đối số thứ hai cho phương thức addItem()
cái gì đó như: $menu->addItem("First Option", &firstOptionFunction());
và khi và chỉ khiFirst Option
được chọn, sau đó $firstOptionFunction
được thực thi.
Có cách nào để đạt được hành vi như vậy trong Perl không? Cảm ơn!
và cách tôi xử lý bên trong phương thức addItem? Tôi khá mới đối với Perl, chưa đầy một vài tuần. Tôi đã suy nghĩ về một cái gì đó tương tự, cố gắng tìm một cách để có được một tham chiếu đến vị trí trong bộ nhớ mọi chức năng có, nhưng tôi mặc dù nó sẽ là quá khó khăn để đạt được. – ILikeTacos
Bạn luôn có thể lưu trữ code_ref bằng $ tự như '$ self -> {first_op_code} = \ & firstOptionFunction;' và không vượt qua tham chiếu. – gpojd
Tuyệt vời! Tôi sẽ cố gắng tinh chỉnh mã mà bạn đã đăng và xem liệu tôi có thể làm cho nó hoạt động không! Cảm ơn nhiều. – ILikeTacos