gpt4 book ai didi

f# - 令人困惑的 F# CodeDom 实现

转载 作者:行者123 更新时间:2023-12-01 10:11:33 25 4
gpt4 key购买 nike

我正在尝试在其中创建一个类和一个方法。对于 C# 和 VB,CodeDom 提供程序发出可预测的输出,但 F# CodeDom 提供程序发出以下内容。我想知道为什么。

exception ReturnException8abef2fbb2404165b4b8690157bd3a49 of obj
exception ReturnNoneException8abef2fbb2404165b4b8690157bd3a49

type
// Hello

test = class
new() as this =
{
}
abstract my_method : unit -> unit
default this.my_method () =
()
end

忽略异常的东西(我猜提供者仍然有点错误),我很好奇为什么我用 new() as this 得到这样一个奇怪的定义,一个抽象方法和默认实现。我在这里遗漏了什么吗?

最佳答案

CodeDOM 生成器生成的代码很奇怪,但它主要是可编译的有效 F# 代码。正如 kvb 指出的那样,构造函数的定义是有效的。如果 CodeDOM 提供程序使用隐式语法生成代码会更好,但如果您有多个构造函数,那将无法正常工作。

至于异常,它们用于模拟命令式 return 构造(如在 C# 中)。例如,您不能直接在 F# 中编写以下内容:

for(int i = 0; i < 10; i++)
if (i == 5) return;

因此 CodeDOM 生成器使用异常来模拟 returntry .. with 来处理它。

F# 中通常的编码风格与 C#/VB 略有不同,CodeDOM 数据结构主要是为 C#/VB 设计的。如果您想生成漂亮的 F# 代码,那么编写您自己的代码生成器可能是更好的主意。或者,有人可以创建不支持所有功能但会生成不错代码的 F# CodeDOM 提供程序。

关于f# - 令人困惑的 F# CodeDom 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4578136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com