2011-09-23 53 views
1

當我調用函數時,我已經知道了F#庫和.NET庫之間的區別。 但是當我在VS 2010對象瀏覽器中看到語句「printfn」時,我只看到了「public static T PrintFormatLine(... format)」而不是「printfn」。爲什麼在VS2010對象瀏覽器中,F#中的語句「printfn」有不同的名稱?

爲什麼在VS2010對象瀏覽器中F#庫中聲明「printfn」的名稱不同?

因爲VS 2010對象瀏覽器中的名稱完全不同,所以如果沒有F#庫的文檔,我該如何在F#庫中調用函數?

+0

請注意,有文檔,請參閱。 http://msdn.microsoft.com/en-us/library/ee370560.aspx – Brian

+2

另請注意,您並不真正希望從C#中調用F#庫中的函數。他們使用C#中很難使用的各種F#特定類型(特別是,從C#調用'printfn'可能幾乎不可能!) –

回答

6

在F#核心庫的printfn功能標註有一個特殊的屬性CompiledName,指定一個編譯形式的函數的名稱:

[<CompiledName("PrintFormatLine")>] 
let printfn fp = ... 

這是什麼好處?我認爲動機是FSharp.Core.dll庫應該遵循通常的.NET命名準則。但是,F#命名準則有點不同(允許使用小寫名稱等),因此該屬性用於使庫看起來更像普通.NET庫。

我不認爲這是F#的用戶會自己使用的東西。如果您正在編寫將從C#使用的代碼,請以C#友好的風格編寫代碼,並且如果您正在編寫將從F#使用的代碼,請遵循F#命名指南。

+1

這意味着.Net視圖顯示.Net常規名稱(PascalCase)比模塊成員的F#常規名稱(camelCase和有時縮寫)。但是,很少從其他語言中調用FSharp.Core的成員。 – Brian

+0

F#文檔就在這裏:http://msdn.microsoft.com/en-us/library/dd233154(VS.100).aspx – Daniel

+0

@dagelee的源代碼也可用。 https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/printf.fs#LC606 – gradbot

相關問題