我正在使用類似於以下的哈希表來存儲可以在提示時輸入的字母以及該選項的描述和將被調用的函數。將值綁定到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