|
|
1
4
区分并集的一大优势是,在编译时可能的情况集是已知的,所以编译器可以告诉你什么时候你的代码不能处理可能的情况。这对重构有很大帮助,因为你可以在现有的并集中添加一个新的用例,编译器会告诉你代码中哪些地方需要更改。 另一个好处是,区分并集上的模式匹配在语法上很优雅——您可以编写非常清晰的代码。 理论上,您可能可以使用Reflection.emit动态生成DU,甚至可以在现有案例中添加新案例。然而,以上两种优势都不适用,所以我认为使用它们没有多大意义。 IMO,标准继承模型也是处理动态加载插件的正确方法。在每个插件所依赖的DLL中定义一个接口或公共基类,让插件定义一个实现它的类,然后在加载后在插件上使用该接口/基类上的方法。 DU被设计为预先固定一组可能的/values/,但使任何人都可以轻松地在DU上编写新函数,而面向对象继承被设计为提前固定一组潜在的基本/functions/,但使所有人都可以容易地添加新值。由于动态加载代码就是添加新值,所以我认为这是一种非常自然的方法。 顺便说一句,DU实际上是由F#编译器使用.NET继承实现的——整个并集类型都有一个基类,然后每个并集情况都有单独的派生类(尽管我认为无参数情况会得到特殊处理)。 |
|
|
Thomas · 使类型别名在F中不可互换# 4 年前 |
|
sdgfsdh · 我该怎么说。使用异步转换函数进行收集? 8 年前 |
|
|
Soldalma · 我可以实例化包含顶级副作用值的类吗? 8 年前 |
|
|
matekus · F#-包含数字的字符串的自然排序 8 年前 |
|
|
matekus · F#类型匹配-无法创建映射或匹配记录 8 年前 |
|
|
Rob Lyndon · 未找到F#ProvidedTypes文件 8 年前 |
|
|
red-swan · 如何将intro ML.Net演示翻译为F#? 8 年前 |
|
|
jkone27 · F#-在编译时从字符串生成简单的空类型 8 年前 |