這是一件很平凡的事情,但我真的很努力使這個工作。我想演繹sqrt n
的結果,其中n
的類型爲int64
,並最終將其傳遞給一個需要使用int
的函數,但我真的很難得到它的一個體面的解決方案,這是我想出的方式,但這是可怕的我無法相信在C#中如此微不足道的事情在F#中應該如此之大。F#鑄造一個int
n
|> float
|> sqrt
|> int
|> function
這是一件很平凡的事情,但我真的很努力使這個工作。我想演繹sqrt n
的結果,其中n
的類型爲int64
,並最終將其傳遞給一個需要使用int
的函數,但我真的很難得到它的一個體面的解決方案,這是我想出的方式,但這是可怕的我無法相信在C#中如此微不足道的事情在F#中應該如此之大。F#鑄造一個int
n
|> float
|> sqrt
|> int
|> function
這是F# - 如果你沒有你想要的,寫一個函數。例如:
let inline sqrttoint n =
(int (sqrt (float n)))
n |> sqrttoint |> function
更重要的是它可以在任何可以轉換爲float
頂部。
C#vs F#的主要問題是您習慣了C#,其中數字類型是自動升級的,而F#則希望您關心大多數類型,並且類型中的更改需要更加明確。
是的,我的意思是我認爲它確實與我習慣的許多事情有關,而與F#中事情的完成方式有很大關係。但它有點令人沮喪。 – 2014-11-03 20:15:01
是的,它有時令人沮喪,但是當你開始使用函數作爲第一類對象並使用部分函數應用程序時,你會發現類型強度是代碼正確性的重大勝利。等價的C#代碼(int)Math.Sqrt(someInt64)幾乎可以完成我在那裏完成的工作,而且幾乎與輸入的工作量相當。不同的語言,不同的習語。 – plinth 2014-11-03 20:21:27
你想將int64轉換爲int32嗎?讓let bignum = 155556L let myint = int(bignum);; – ArthurCPPCLI 2014-11-03 20:08:43
C#版本只會節省您從'long'到'double'的單個演員陣容。 – Lee 2014-11-03 20:19:38