2014-11-03 166 views
0

這是一件很平凡的事情,但我真的很努力使這個工作。我想演繹sqrt n的結果,其中n的類型爲int64,並最終將其傳遞給一個需要使用int的函數,但我真的很難得到它的一個體面的解決方案,這是我想出的方式,但這是可怕的我無法相信在C#中如此微不足道的事情在F#中應該如此之大。F#鑄造一個int

n 
|> float 
|> sqrt 
|> int 
|> function 
+0

你想將int64轉換爲int32嗎?讓let bignum = 155556L let myint = int(bignum);; – ArthurCPPCLI 2014-11-03 20:08:43

+0

C#版本只會節省您從'long'到'double'的單個演員陣容。 – Lee 2014-11-03 20:19:38

回答

3

這是F# - 如果你沒有你想要的,寫一個函數。例如:

let inline sqrttoint n = 
    (int (sqrt (float n))) 

n |> sqrttoint |> function 

更重要的是它可以在任何可以轉換爲float頂部。

C#vs F#的主要問題是您習慣了C#,其中數字類型是自動升級的,而F#則希望您關心大多數類型,並且類型中的更改需要更加明確。

+0

是的,我的意思是我認爲它確實與我習慣的許多事情有關,而與F#中事情的完成方式有很大關係。但它有點令人沮喪。 – 2014-11-03 20:15:01

+1

是的,它有時令人沮喪,但是當你開始使用函數作爲第一類對象並使用部分函數應用程序時,你會發現類型強度是代碼正確性的重大勝利。等價的C#代碼(int)Math.Sqrt(someInt64)幾乎可以完成我在那裏完成的工作,而且幾乎與輸入的工作量相當。不同的語言,不同的習語。 – plinth 2014-11-03 20:21:27