我有一个如下所示的主要内容:
main :: IO ()
main = do
args <- getArgs
putStrLn $ functionName args
where
functionName args = "problem" ++ (filter (/= '"') $ show (args!!0))
我不想像现在那样将名称放入标准输出,而是想调用该函数。
我知道我可以使用提示(如 Haskell: how to evaluate a String like "1+2" 中提到的),但我认为这对于获取简单的函数名称来说有点过分了。
现阶段如果函数不存在,程序崩溃也没关系!
最佳答案
如果不采取特殊措施来保存它们,函数名称可能会在编译后的 Haskell 程序中完全消失。
我建议只制作一张大的顶级 map :
import Data.Map ( Map )
import qualified Data.Map as Map
functions :: Map String (IO ())
functions = Map.fromList [("problem1", problem1), ...]
call :: String -> IO ()
call name =
case Map.lookup name of
Nothing -> fail $ name + " not found"
Just m -> m
main :: IO ()
main = do
args <- getArgs
call $ functionName args
where
functionName args = "problem" ++ (filter (/= '"') $ show (args!!0))
关于haskell - 使用字符串内容调用同名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21121918/