![](/img/trans.png)
[英]“CompileAssemblyFromSource” in f# powerPack codeDom
[英]Confusing implementation of F# CodeDom
我正在嘗試創建一個類和一個方法。 對於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生成器使用異常來模擬return
並try .. with
來處理它。
F#中通常的編碼風格與C#/ VB略有不同,CodeDOM數據結構主要是為C#/ VB設計的。 如果你想生成漂亮的F#代碼,那么編寫自己的代碼生成器可能是個更好的主意。 或者,有人可以創建不支持所有功能的F#CodeDOM提供程序,但會生成很好的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.