Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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# 与传统的';类型提供程序';?_F#_Type Providers - Fatal编程技术网

F# 与传统的';类型提供程序';?

F# 与传统的';类型提供程序';?,f#,type-providers,F#,Type Providers,从: F#类型提供程序是提供类型、属性、, 以及在程序中使用的方法 那么它就像一个.NET类库?有什么区别?以及: 手动编写这些类型非常耗时,而且很难完成 维持 类型提供程序是否自动写入自身?还有更多: 类似地,WSDL web服务的类型提供程序将提供 直接使用任何WSDL所需的类型、属性和方法 网络服务 有一些实用程序可以从WSDL URL生成类型,同样,类型提供程序在这里提供的优势是什么 我最初的想法是F#类型提供程序在运行时提供类型,如.NET远程处理,但情况似乎并非如此。使用它们的优点是

从:

F#类型提供程序是提供类型、属性、, 以及在程序中使用的方法

那么它就像一个.NET类库?有什么区别?以及:

手动编写这些类型非常耗时,而且很难完成 维持

类型提供程序是否自动写入自身?还有更多:

类似地,WSDL web服务的类型提供程序将提供 直接使用任何WSDL所需的类型、属性和方法 网络服务

有一些实用程序可以从WSDL URL生成类型,同样,类型提供程序在这里提供的优势是什么


我最初的想法是F#类型提供程序在运行时提供类型,如.NET远程处理,但情况似乎并非如此。使用它们的优点是什么?

您可以使用代码生成工具从WSDL或数据库生成类型,就像集成到Visual Studio中的工具一样。类型提供程序的作用基本相同,但直接将该过程集成到编译中。这样,您就不必担心在模式更改时重新生成类型


此外,类型提供程序支持使用已擦除的类型执行此操作,这些类型是实际上不存在的“虚拟”类型。这意味着,不是生成500个类型和一个大程序集,而是只生成实际使用的程序集,这意味着更小的程序集和对导入大型递归模式的支持,如Freebase,在许多方面,代码生成是类型提供程序的自然比较。但是,类型提供程序具有代码生成所缺少的几个理想属性:

  • 类型提供程序可以在F#脚本中使用,而无需切换上下文。对于代码生成器,您必须调用生成器、引用代码等。对于类型提供程序,您引用类型提供程序程序集(就像引用任何其他F#/.NET程序集一样),然后立即使用提供的类型。这是一个真正的游戏规则改变的交互式脚本
  • 正如Gustavo提到的,擦除类型允许类型提供程序处理传统代码生成会生成太多代码的情况(例如,Freebase有数千种类型,这对于类型提供程序来说是没有问题的)
  • 类型提供程序可以支持无效,因此,如果数据源发生更改,编译器将立即重新检查该文件
  • 同样,使用代码生成器,生成的代码可能与数据源不同步;类型提供程序可以防止此问题的发生,每次编译程序时都会检查数据源(尽管为了方便起见,许多类型提供程序还提供了使用缓存模式的选项)
  • 类型提供程序可以说更容易实现,尽管它可能取决于场景和作者的背景

投了赞成票,非常感谢。我意识到这一点有点过分,而且优势相当微妙。在我完全理解之前,我需要阅读更多关于这个话题的内容。我担心:)。我投了赞成票并接受了答案,谢谢!!不过我并不完全理解,所以我会仔细阅读这个主题,然后回来回顾一下。