python 中有一个名为 eval
的函数,它接受字符串输入并对其求值。
>>> x = 1
>>> print eval('x+1')
2
>>> print eval('12 + 32')
44
>>>
Haskell 中什么是 eval
函数?
最佳答案
的确,在 Haskell 中,就像在 Java 或 C++ 或类似语言中一样,您可以调用编译器,然后动态加载代码并执行它。然而,这通常是重量级的,几乎不是人们在其他语言中使用 eval()
的原因。
人们倾向于在一种语言中使用 eval()
,因为考虑到该语言的功能,对于某些类别的问题,从类似于该语言本身的程序输入构造一个字符串更容易,而不是而不是直接解析和评估输入。
例如,如果您希望允许用户在输入字段中输入的不仅仅是数字,还包括简单的算术表达式,在 Perl 或 Python 中,调用 eval()
会容易得多> 在输入上,而不是为您要允许的表达式语言编写解析器。不幸的是,这种方法几乎总是导致整体用户体验不佳(编译器错误消息不适用于非程序员)并打开安全漏洞。在不使用 eval()
的情况下解决这些问题通常需要相当多的代码。
在 Haskell 中,感谢像 Parsec 这样的东西,实际上很容易为这类输入问题编写解析器和求值器,并且大大消除了对eval
的向往。
关于python - 相当于 Haskell 中的 python eval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2469139/