Сравнение F # и C # для приведений / преобразований см.
Как этот код C # выглядит в F #?(часть первая: выражения и заявления)
для краткого обсуждения числовых преобразований, преобразований в боксы, повышения и понижения.
(Обратите внимание, что вы перечислили
type value
для F #, я полагаю, вы говорите, например,
int 'a'
, но обратите внимание, что int
здесь это имя функции в библиотеке F #, а неимя типа . См. документы здесь ; в общем случае для каждого примитивного числового типа T
существует функция с именем T
, которая преобразует свой аргумент в место назначениятип с таким же именем.)
Относительно неявных преобразований в F #:
- Там
string
-> PrintfFormat
(как часть магии для typesafe printf
) - Есть upcasts при вызовах методов и присваиваниях свойств / массивов, что позволяет вам делать, например,
f(dog)
или person.Pet <- dog
при *Ожидается 1042 *Это также работает для известных номинальных типов литералов коллекции, например, let controls : Control list = [button; form; window]
- В аргументах вызова метода преобразование функции в делегат , которые включают, например,
new Thread(fun() -> ())
, где функция F #преобразуется в делегат ThreadStart
. - Существует
ref
в byref
преобразование в аргументах вызова метода, что позволяет передавать ref
, например, out
параметр.
Я думаю, что так оно и есть - в F # очень мало неявных преобразований.