.net F#相当于评估
是否有一个F#等价于eval?我的目的是让我的应用程序从一个文件中加载一个小的代码示例.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的
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代码),因此当您将某些程序作为字符串时,它们并不真正有用。