在其他语言中,我们可以拥有一个不带参数的函数。我们可以在ocaml中有0个参数函数吗?
答案 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。