Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net F#相当于评估_.net_F#_Lisp_Eval - Fatal编程技术网

.net F#相当于评估

.net F#相当于评估,.net,f#,lisp,eval,.net,F#,Lisp,Eval,是否有一个F#等价于eval?我的目的是让我的应用程序从一个文件中加载一个小的代码示例 let file = "c:\mysample" let sample = loadFromFile file let results = eval(sample) 我对F#不熟悉,在将其应用于项目之前,我试图找出一些限制 谢谢没有任何函数允许您直接执行此操作。但是,当您希望以编程方式编译F#源文件时,可以从应用程序中调用F#编译器。最简单的方法是使用F#CodeDOM提供程序,它是F#PowerPack的

是否有一个F#等价于eval?我的目的是让我的应用程序从一个文件中加载一个小的代码示例

let file = "c:\mysample"
let sample = loadFromFile file
let results = eval(sample)
我对F#不熟悉,在将其应用于项目之前,我试图找出一些限制


谢谢

没有任何函数允许您直接执行此操作。但是,当您希望以编程方式编译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反射加载程序集,并从程序集中运行某些特定的函数或类(例如,可以查找具有特定名称或标记有某些属性的函数)


(顺便说一句,如果你的源代码相对简单,使用引用语或编写你自己的解释器可能是一种选择,但如果你想支持F#的全部功能,可能就不是了)

可能的副本你想从该文件加载F#代码吗?我想这篇文章提出了一个不同的问题(尽管技术上相关)。Brian提到的是关于简单表达式的问题,而这一个是关于编译/评估文件的问题。从技术上讲,这可能是同一件事,但可能是完全不同的用例。我仍在尝试了解一般的引用语和元编程。我很确定这是我不需要的功能,但事实并非如此考虑通过数据集在单独的文件中提供一些测试用例,我可以动态加载到.CodeDom中(呃,还记得在2004年用c#除掉那只猪吗?)非常感谢您的回答。CodeDOM不是一种非常优雅的技术,但当您只需要调用F#编译器时,它应该可以做到这一点(使用CodeDOM生成F#代码在理论上也是可能的,但它有一些限制).F#中的引号主要用于在某些不同的执行环境中执行用F#编写的代码(如SQL、客户端的JavaScript、GPU代码),因此当您将某些程序作为字符串时,它们并不真正有用。