2009-05-11 4 views
4
/// I can't do this 
let max = float n |> sqrt |> int64 |> Math.BigInt 

/// But this is allowed 
let max = Math.BigInt(float n |> sqrt |> int64) 

Répondre

3

Les constructeurs de classe ne peuvent pas être utilisés sans arguments. Vous pouvez écrire

let max = float n |> sqrt |> int64 |> (fun x -> Math.BigInt(x)) 

si vous le souhaitez. (. A première vue, je ne sais pas la raison de cette restriction, cependant)

+0

Est-ce que int64 est une classe? – Unknown

+0

Non, dans ce contexte, c'est une fonction définie dans http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/FSharp.Core/Microsoft.FSharp.Core.Operators.html – Brian

+0

pouvez-vous me dire où trouver la racine carrée pour un BigInt? – Unknown

0

Dans ma version de F # (1.9.4.19 sur Mono), les deux versions échouent avec:

The member or object constructor 'BigInt' takes 0 argument(s) but is here given 1. The required signature is 'Math.BigInt()'.

Je peux utiliser

let max = float n |> sqrt |> int64 |> Math.BigInt.of_int64 

pour obtenir un bigint ou

let max = float n |> sqrt |> int64 |> Math.BigInt.FromInt64 

pour obtenir un Math.BigInt.

Questions connexes