Правильный взгляд на это заключается в том, что в F # нет такого понятия, как функции без параметров.Все функции должны принимать параметр, но иногда вам все равно, что это такое, поэтому вы используете ()
(значение типа singleton).Вы также можете создать такую функцию:
let printRandom unused =
x = MyApplication.getRandom()
printfn "%d" x
x
или вот так:
let printRandom _ =
x = MyApplication.getRandom()
printfn "%d" x
x
Но ()
- это способ по умолчанию выразить, что вы не используете параметр.Он выражает этот факт вызывающей стороне, потому что тип unit -> int
не 'a -> int
;а также читателю, потому что сайт вызова printRandom ()
не printRandom "unused"
.
На самом деле каррирование и компоновка основаны на том факте, что все функции принимают один параметр и возвращают одно значение.
Между прочим, самый распространенный способ записи вызовов с модулем - с пробелом, особенно у не .NET-родственников F #, таких как Caml, SML и Haskell.Это потому, что ()
- это одноэлементное значение, а не синтаксическая вещь, как в C #.