python - 相当于 Haskell 中的 python eval

标签 python haskell metaprogramming eval

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/

相关文章:

haskell - 使用管道将文件作为 HTTP 请求的源

haskell - 您如何识别一元设计模式?

c++ - 按指定的顺序迭代元组的元素

c++ - 编译处理大量数字的时间斐波那契

python - 有效地指定具有相同前缀的多个列名称

haskell - 高阶函数中的存在类型

java - 将 jar 输出通过管道传输到 python 中的文件

F# 引用 : variable may escape scope

python - Vim PEP-8 插件的配置设置以忽略错误和警告?

python - tuple'对象没有属性 'get'