gpt4 book ai didi

haskell - 如何使用 Haskell 动态调用函数

转载 作者:行者123 更新时间:2023-12-04 04:48:30 24 4
gpt4 key购买 nike

我希望根据关联列表中的内容动态调用函数。
这是半伪代码中的示例。 listOfFunctions 将被传递给 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: Write new vHost file

2: Exit


您编写了新的 vHost 文件并且没有显示新菜单

1: Enter new directive

2: Write file

3: Exit


您为 vHost 输入了一些新指令,现在可以编写文件了。
该程序不会盲目地编写它可以编写的每一个指令,而是只会编写您提供的指令。这就是关联列表的用武之地。写一个巨大的 if/then/else 或 case 语句是疯狂的。循环遍历列表,查找添加了哪些指令并调用函数以相应地编写它们会更加优雅。
因此,循环,找到一个函数名,用提供的值调用所述函数。
感谢任何可以提供帮助的人。
编辑:
这是我提出的解决方案(总是欢迎 build 性的批评)。
我导出了在关联列表中编写指令的函数,因为提供的每个答案都说只包含该函数是要走的路。
funcMap = [("writeServerName", writeServerName)
,("writeServeralias", writeServerAlias)
,("writeDocRoot", writeDocRoot)
,("writeLogLevel", writeErrorLog)
,("writeErrorPipe", writeErrorPipe)
,("writeVhostOpen", writeVhostOpen)]
在实际写入主机的文件中,该文件被导入。
我有一个名为 hostInfo 的关联列表来模拟将从最终用户收集的一些虚拟值和一个名为 runFunction 的函数,它使用 edalorzo 提供的技术来过滤这两个列表。通过匹配两个列表的键,我确保使用正确的值调用正确的函数。
import Vhost.Directive

hostInfo = [("writeVhostOpen", "localhost:80")
,("writeServerName", "norics.com")]

runFunctions = [f val | (mapKey, f) <- funcMap, (key, val) <- hostInfo, mapKey == key]

最佳答案

您可以简单地将函数直接包含在列表中;函数是值,因此您可以在列表中按名称引用它们。将它们从列表中删除后,应用它们就像 func value 一样简单。 .根本不需要涉及他们的名字。

关于haskell - 如何使用 Haskell 动态调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10004442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com