Почему F # не может определить тип этого утверждения? - PullRequest
4 голосов
/ 11 мая 2009
/// 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)

Ответы [ 2 ]

3 голосов
/ 11 мая 2009

Конструкторы классов нельзя использовать без аргументов. Вы можете написать

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

если хотите. (Впрочем, я не знаю причину этого ограничения.)

0 голосов
/ 11 мая 2009

В моей версии F # (1.9.4.19 на Mono) обе версии завершаются с ошибкой:

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

Я могу использовать

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

чтобы получить bigint или

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

чтобы получить Math.BigInt.

...