我正在寻找基于关联列表中找到的内容动态调用函数。如何使用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