我正在使用类似于以下的哈希表来存储可以在提示时输入的字母以及该选项的描述和将被调用的函数。将值绑定到Perl中的函数
my %main_menu = (
"l" => ["list locks", \&list_locks],
"n" => ["new lock", \&new_lock],
"u" => ["update lock", \&update_lock]
);
menu_prompt(\%main_menu)
产生以下菜单:
________________________
| l - list locks |
| n - new lock |
| u - update lock |
|________________________|
(l,n,u)>
当用户输入 'U',在提示中,update_lock功能将被调用。
现在,我想用一个新的散列表(%lock_menu
)产生一个类似的菜单。但是,我将首先提示用户输入他们希望更新的锁的ID。
Please enter the ID of a lock to update: 1 You are updating lock 1. __________________ | l - list users | | n - new user | |__________________| (p,u,c)>
我想存储锁ID,以便它可以通过锁菜单功能访问。例如:
my %users_menu = ( "l" => ["list users", \&list_users], "n" => ["new user", \&new_user]);
我无法弄清楚如何“附加”锁ID的功能,在%users_menu
。所以当选择'l'时,list_users将被作为第一个参数被调用。
我似乎记得ML如果你只用一个参数调用ML语言中的n参数函数,它将产生一个函数,它需要n-1个参数。例如,调用func(int,int,int)作为func(5)会产生func(int,int),并将第一个参数保存为5.
这在Perl中可能吗?或者我正在以这种错误的方式去做?请告诉我。
UPDATE:这是打印一份菜单(print_options)功能,提示用户输入一个字母,并调用相应的功能。
sub menu_prompt
{
my $options = shift;
print_options $options;
my $choice = <>;
chomp $choice;
if (defined $$options{$choice})
{
$$options{$choice}[1](); # no arguments
}
}
我想找到一种方法,使用该功能适用于所有的菜单,而不是写一个值的传递给函数一个单独的函数。
这就是我一直在寻找,谢谢! – titaniumdecoy 2009-12-12 03:07:09
和我自己的代码中,我可能会写最后一行为'goto&{$$ options {$ choice} [1]};'这是相当和更快的,但对于那些学习Perl的人来说不太清楚Perl – 2009-12-12 04:26:44
Eric:为了那些仍然在学习的人,至少要在临近之前添加一些临时工。除了。这不是关于表现。 – tsee 2009-12-12 14:33:54