F # forward pipe для конвертации из int в bigint - PullRequest
6 голосов
/ 01 июля 2010

Я довольно новичок в F # и натолкнулся на этот сценарий и надеялся, что кто-нибудь сможет объяснить, почему моему компилятору не нравится код ...

Если в F # я делаю следующее ...

let FloatToInt = 10.0 |> int
let IntToFloat = 10 |> float

Все хорошо, и число приводится к соответствующему типу данных ...

, если, однако, я делаю следующее ...

let IntToBigInt = 10 |> bigint

Я получаю ошибку"Неверное использование имени типа или конструктора объекта."Я предполагаю, что это потому, что нет перегрузки оператора для прямого канала для bigint?

Если бы я хотел сделать этот код возможным, как бы я это сделал?Я знаю, что мог бы использовать другой синтаксис, такой как ...

let IntToBigInt = bigint(10)

Но мне действительно нравится синтаксис Forward Pipe, и я хотел бы знать, смогу ли я его достичь, чтобы ...

let IntToBigInt = 10 |> bigint

будет работать ...

1 Ответ

14 голосов
/ 01 июля 2010

Это не имеет ничего общего с перегрузками. 10.0 |> int работает, потому что есть функция с именем int. Однако функции с именем bigint нет, поэтому 10 |> bigint не работает.

Если вы определите один, он работает:

> let bigint (x:int) = bigint(x);; // looks recursive, but isn't
val bigint : int -> System.Numerics.BigInteger

> 42 |> bigint;;
val it : System.Numerics.BigInteger = 42I
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...