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
F#从程序集加载报价数据-explicitlyRegisterTopDefs函数_F#_Metaprogramming - Fatal编程技术网

F#从程序集加载报价数据-explicitlyRegisterTopDefs函数

F#从程序集加载报价数据-explicitlyRegisterTopDefs函数,f#,metaprogramming,F#,Metaprogramming,我想了解如何从程序集中从标有[]的顶级函数中检索报价 看起来这是在这里完成的:,但是代码(在文章的最后)简单地调用explicitlyRegisterTopDefs来检索顶级引用定义 在最新版本的PowerPack或F#编译器中,我似乎找不到这个函数(我正在使用.NET4.0) 自2006年写这篇文章以来,很多事情都发生了变化,例如,正如您所看到的,Microsoft.FSharp.quotes.Raw被重构 有人知道如何用最新版本的PowerPack/编译器捕获这些顶级引用吗 谢谢。我们做了很

我想了解如何从程序集中从标有
[]
的顶级函数中检索报价

看起来这是在这里完成的:,但是代码(在文章的最后)简单地调用
explicitlyRegisterTopDefs
来检索顶级引用定义

在最新版本的PowerPack或F#编译器中,我似乎找不到这个函数(我正在使用.NET4.0)

自2006年写这篇文章以来,很多事情都发生了变化,例如,正如您所看到的,
Microsoft.FSharp.quotes.Raw
被重构

有人知道如何用最新版本的PowerPack/编译器捕获这些顶级引用吗


谢谢。

我们做了很多类似这个WebSharper的东西。基本上是这样(不需要电源组):

module QP=quotes.Patterns
模块QDP=Quotements.DerivedPatterns
[]
设myFunc x=x+1
匹配
|QP.Call(uqdp.methodwithreflecteddefinitiond,QDP)->
打印fn“%A”d
| _ ->
printfn“错误”
我希望这对您的场景有所帮助

但是请注意,它有很多问题。最严重的是,这些活动模式不时抛出异常。此外,它们基于
System.Reflection
,大大降低了速度。此外,您还必须考虑意外的事情,例如没有为您解决引用的问题,某些构造函数引用失败,等等


对于即将发布的WebSharper 2.4,我最终重新编写了引用加载代码,使用F#编译器源代码作为二进制格式的定义,避免了系统反射,大大提高了速度和可靠性。

是的-这应该可以工作。新(ish)版本的F#库会自动加载引用,甚至从当前程序集以外的其他程序集加载引用。
module QP = Quotations.Patterns
module QDP = Quotations.DerivedPatterns

[<ReflectedDefinition>]
let myFunc x = x + 1

match <@ myFunc 1 @> with
| QP.Call(_, QDP.MethodWithReflectedDefinition d, _) ->
    printfn "%A" d
| _ ->
    printfn "ERROR"