F# 与传统的';类型提供程序';?
从: F#类型提供程序是提供类型、属性、, 以及在程序中使用的方法 那么它就像一个.NET类库?有什么区别?以及: 手动编写这些类型非常耗时,而且很难完成 维持 类型提供程序是否自动写入自身?还有更多: 类似地,WSDL web服务的类型提供程序将提供 直接使用任何WSDL所需的类型、属性和方法 网络服务 有一些实用程序可以从WSDL URL生成类型,同样,类型提供程序在这里提供的优势是什么F# 与传统的';类型提供程序';?,f#,type-providers,F#,Type Providers,从: F#类型提供程序是提供类型、属性、, 以及在程序中使用的方法 那么它就像一个.NET类库?有什么区别?以及: 手动编写这些类型非常耗时,而且很难完成 维持 类型提供程序是否自动写入自身?还有更多: 类似地,WSDL web服务的类型提供程序将提供 直接使用任何WSDL所需的类型、属性和方法 网络服务 有一些实用程序可以从WSDL URL生成类型,同样,类型提供程序在这里提供的优势是什么 我最初的想法是F#类型提供程序在运行时提供类型,如.NET远程处理,但情况似乎并非如此。使用它们的优点是
我最初的想法是F#类型提供程序在运行时提供类型,如.NET远程处理,但情况似乎并非如此。使用它们的优点是什么?您可以使用代码生成工具从WSDL或数据库生成类型,就像集成到Visual Studio中的工具一样。类型提供程序的作用基本相同,但直接将该过程集成到编译中。这样,您就不必担心在模式更改时重新生成类型
此外,类型提供程序支持使用已擦除的类型执行此操作,这些类型是实际上不存在的“虚拟”类型。这意味着,不是生成500个类型和一个大程序集,而是只生成实际使用的程序集,这意味着更小的程序集和对导入大型递归模式的支持,如Freebase,在许多方面,代码生成是类型提供程序的自然比较。但是,类型提供程序具有代码生成所缺少的几个理想属性:
- 类型提供程序可以在F#脚本中使用,而无需切换上下文。对于代码生成器,您必须调用生成器、引用代码等。对于类型提供程序,您引用类型提供程序程序集(就像引用任何其他F#/.NET程序集一样),然后立即使用提供的类型。这是一个真正的游戏规则改变的交互式脚本
- 正如Gustavo提到的,擦除类型允许类型提供程序处理传统代码生成会生成太多代码的情况(例如,Freebase有数千种类型,这对于类型提供程序来说是没有问题的)
- 类型提供程序可以支持无效,因此,如果数据源发生更改,编译器将立即重新检查该文件
- 同样,使用代码生成器,生成的代码可能与数据源不同步;类型提供程序可以防止此问题的发生,每次编译程序时都会检查数据源(尽管为了方便起见,许多类型提供程序还提供了使用缓存模式的选项)
- 类型提供程序可以说更容易实现,尽管它可能取决于场景和作者的背景