我们可以在ocaml中定义一个带0参数的函数吗?

时间:2015-01-04 05:49:17

标签: ocaml

在其他语言中,我们可以拥有一个不带参数的函数。我们可以在ocaml中有0个参数函数吗?

3 个答案:

答案 0 :(得分:3)

OCaml中的函数只有一个参数(忽略由于可选参数引起的复杂性)。所以,你不能拥有一个没有参数的函数。

正如@ alfa64所说,你可以将一个简单的值视为一个没有参数的函数。但它总是具有相同的值(事实上,它使它类​​似于纯函数)。

如果你想编写一个实际上不需要任何参数的函数(大概有一个副作用),那么传统上使用()作为参数:

# let p () = Printf.printf "hello, world\n";;
val p : unit -> unit = <fun>
# p ();;
hello, world
- : unit = ()
# 

答案 1 :(得分:3)

在OCaml函数中总是有一个参数。因此,我们可能想知道如何在OCaml中翻译以下say_hello C函数:

void
say_hello()
{
    printf("Hello, world!\n");
}

OCaml中有一个特殊类型unit,它只有一个值,写为()。虽然它可能看起来很奇怪而且没用,但它增加了语言的规律性:不需要特定参数的函数可以只接受类型unit的参数,不返回有用值的函数通常返回类型{{ 1}}。以下是将上述unit函数转换为OCaml的方法:

say_hello

顺便提一下,如果没有类型# let say_hello () = print_endline "Hello, world!";; val say_hello : unit -> unit = <fun> 而是类似的void类型,基于模板的元编程在C ++中会容易得多。在模板特化中单独处理没有参数的函数是很常见的。


对象方法虽然与函数类似,但不需要参数。

unit

答案 2 :(得分:0)

而不是

let foo n = 55

你只是

let foo = 55

然后在任何地方打电话给foo。