我正在尋找基於關聯列表中找到的內容動態調用函數。如何使用Haskell動態調用函數
這裏是一個半僞碼的例子。 listOfFunction將傳遞給callFunctions。
listOfFunctions = [('function one', 'value one')
, ('function two', 'value two')
, ('function three', 'value three')]
callFunctions x = loop through functions
if entry found
then call function with value
else do nothing
問題的癥結並不在列表中循環,相反,它是如何調用的函數,一旦我有它的名字?
考慮這個用例作進一步的說明。您打開命令提示符並顯示以下菜單。
1:編寫新的虛擬主機文件
2:退出
你寫新的虛擬主機文件,而不是一個新的菜單呈現
1:輸入新指令
2:寫入文件
3:退出
您爲vHost輸入了一些新指令,現在已準備好寫入該文件。
該程序不會盲目地寫每一個指令,而只會寫出你提供的指令。這是關聯名單的來源。編寫一個巨大的if/then/else或case語句就是瘋狂。循環遍歷列表會更加優雅,尋找哪些指令被添加並調用函數來相應地寫入它們。
因此,循環,找到一個函數名稱,使用提供的值調用該函數。
感謝任何能夠幫助您的人。
編輯:
這裏是我想出來的(建設性的批評總是受歡迎的)解決方案。
我導出了在關聯列表中寫入指令的函數,因爲提供的每個答案都表示只包含該函數就是要走的路。
funcMap = [("writeServerName", writeServerName)
,("writeServeralias", writeServerAlias)
,("writeDocRoot", writeDocRoot)
,("writeLogLevel", writeErrorLog)
,("writeErrorPipe", writeErrorPipe)
,("writeVhostOpen", writeVhostOpen)]
在實際寫入主機的文件中,導入了該文件。
我有稱爲Hostinfo中的關聯列表,以模擬將來自終端用戶收集一些虛值和一個函數調用runFunction使用由edalorzo供給通過兩個列表來過濾技術。通過匹配兩個列表的鍵,我確保使用正確的值調用正確的函數。
我知道你對答案有更多的投票,但是,因爲我結束了使用edalorzo的代碼,我接受了他的答案。 – OpCodeOmega 2012-04-06 02:31:33