Pra*_*are 9 python haskell eval metaprogramming
python中有一个函数,eval它接受字符串输入并对其进行求值.
>>> x = 1
>>> print eval('x+1')
2
>>> print eval('12 + 32')
44
>>>
Run Code Online (Sandbox Code Playgroud)
什么是Haskell相当于eval函数?
Mtn*_*ark 25
确实,在Haskell中,如在Java或C++或类似语言中,您可以调用编译器,然后动态加载代码并执行它.然而,这通常是沉重的重量,几乎从来没有人们使用eval()其他语言.
人们倾向于使用eval()某种语言,因为考虑到语言的设施,对于某些类型的问题,从类似于语言本身的程序输入构造字符串更容易,而不是直接解析和评估输入.
例如,如果你想允许用户不仅输入输入字段中的数字,而且输入简单的算术表达式,在Perl或Python中调用eval()输入要比为表达式语言编写解析器要容易得多想要允许.不幸的是,这种方法几乎总是导致整体用户体验不佳(编译器错误消息不适用于非程序员)并打开安全漏洞.在不使用的情况下解决这些问题eval()通常涉及相当多的代码.
在Haskell中,由于像Parsec这样的东西,实际上很容易为这些类型的输入问题编写解析器和求值器,并且大大消除了对它的渴望eval.
Don*_*art 10
虽然Template Haskell允许编译时评估,但语言中没有内置'eval'.
对于运行时'eval' - 即运行时元编程 - Hackage上有许多包基本上导入GHC或GHCi,包括旧的hs-plugins包和提示包.
没有 eval 等价物,Haskell 是一种静态编译语言,与 C 或 C++ 相同,它们也没有 eval。
| 归档时间: |
|
| 查看次数: |
3875 次 |
| 最近记录: |