F#相当于Eval

时间:2010-04-09 14:07:28

标签: .net f# lisp eval

F#是否相当于eval?我的目的是让我的应用从文件中加载一个小代码示例,基本上是

let file = "c:\mysample"
let sample = loadFromFile file
let results = eval(sample)

我是F#的新手,在将其应用到项目之前试图找出一些限制。

谢谢

1 个答案:

答案 0 :(得分:13)

没有任何功能可以让您直接执行此操作。但是,如果要以编程方式编译F#源文件,可以从应用程序中调用F#编译器。最简单的方法是使用F#CodeDOM提供程序,它是F#PowerPack的一部分(在FSharp.Compiler.CodeDom.dll程序集中)。但是,请注意,您需要在用户的计算机上安装F#编译器。

运行编译器的代码大致如下:

open Microsoft.FSharp.Compiler.CodeDom

let provider = new FSharpCodeProvider()
let compiler = provider.CreateCompiler()

let parameters = new CompilerParameters
  (GenerateExecutable = true, OutputAssembly = "file.exe")
let results = icc.CompileAssemblyFromFile(parameters, "filename.fs")

将源文件编译成程序集后,您需要使用.NET Reflection加载程序集并从程序集中运行某些特定的函数或类(例如,您可以查找具有某些特殊名称或标记的函数)有一些属性)。

(作为旁注,如果您的源代码相对简单,可能会选择使用related SO question中提到的引文或编写自己的解释器,但如果您想支持F#的全部力量