我需要将引号编译成JS字符串(我的主要目标是在F#中编写MongoDB MapReduce作业)。我找到了example代码:
open Microsoft.FSharp.Quotations
open WebSharper
type AR = IntelliFactory.Core.AssemblyResolution.AssemblyResolver
module FE = WebSharper.Compiler.FrontEnd
let compile (expr: Expr) : string option =
let loader = FE.Loader.Create (AR.Create()) (eprintfn "%O")
let options =
{ FE.Options.Default with
References =
List.map loader.LoadFile [
"WebSharper.Main.dll"
"WebSharper.Collections.dll"
"WebSharper.Control.dll"
] }
let compiler = FE.Prepare options (eprintfn "%O")
compiler.Compile expr
|> Option.map (fun e -> e.ReadableJavaScript)
但是编译器输出的是一个简单的函数,比如
<@ fun x -> x + 2 @>
非常丑陋
(function()
{
var Global=this,Runtime=this.IntelliFactory.Runtime,EntryPoint;
Runtime.Define(Global,{
WebSharper:{
EntryPoint:{
Example:Runtime.Field(function()
{
return function(x)
{
return x+2;
};
})
}
}
});
Runtime.OnInit(function()
{
return EntryPoint=Runtime.Safe(Global.WebSharper.EntryPoint);
});
Runtime.OnLoad(function()
{
EntryPoint.Example();
return;
});
}());
我没有找到任何选项来禁用输出中的所有WebSharper内容。有谁知道这样做的方法?