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

我们可以在ocaml中定义一个参数为0的函数吗?,ocaml,Ocaml,在其他语言中,我们可以有一个不带参数的函数。我们可以在ocaml中使用0参数函数吗?而不是 let foo n = 55 你只是 let foo = 55 然后在任何地方调用foo。OCaml中的函数只有一个参数(忽略可选参数导致的复杂情况)。所以,你不能有一个没有参数的函数 AS @ ALFA64说,你可以考虑一个简单的值作为一个没有参数的函数。但它总是有相同的值(事实上,这使它类似于纯函数) 如果您想编写一个实际上不需要任何参数(可能有副作用)的函数,传统做法是使用()作为其参数: #

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

而不是

let foo n = 55
你只是

let foo = 55

然后在任何地方调用foo。

OCaml中的函数只有一个参数(忽略可选参数导致的复杂情况)。所以,你不能有一个没有参数的函数

AS @ ALFA64说,你可以考虑一个简单的值作为一个没有参数的函数。但它总是有相同的值(事实上,这使它类似于纯函数)

如果您想编写一个实际上不需要任何参数(可能有副作用)的函数,传统做法是使用
()
作为其参数:

# let p () = Printf.printf "hello, world\n";;
val p : unit -> unit = <fun>
# p ();;
hello, world
- : unit = ()
# 
#让p()=Printf.Printf“你好,世界”\n;;
val p:单位->单位=
#p();;
你好,世界
-:单位=()
# 

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

void
say_hello()
{
    printf("Hello, world!\n");
}
OCaml中有一个特殊类型的
单元
,它只有一个值,写为
()
。虽然它看起来很奇怪也没用,但它增加了语言的规则性:不需要特定参数的函数可以只接受
unit
类型的参数,而不返回有用值的函数通常返回
unit
类型的值。下面是如何将上述
say_hello
函数转换为OCaml:

# let say_hello () = print_endline "Hello, world!";;
val say_hello : unit -> unit = <fun>

第一个'foo'的类型是函数,而第二个的类型是'int'。我想知道是否有一个不带参数的函数。而且,这显然是值类型,而不是函数类型。假设右侧是任何一种有效的表达式,那么副作用将在声明时应用,而不是在计算
foo
的引用时应用。您可以扩展对象方法的情况吗?我刚刚写了一个无参数的序列号方法,但我想知道它如何适合这张图片?@Str。我不知道你对什么感兴趣。你能说得更具体一点吗?事实是坚如磐石:每个函数都有一个参数。没有参数“被调用”或计算的方法不适合这里,它背后一定有一些完全不同的工作方式。或者“一个方法怎么可能不需要一个参数”?@Str。我仍然不知道你在问什么。如果您想知道语言设计中明显的不一致性(为什么函数需要参数而方法不需要参数),那么不需要参数的方法在构建聚合时非常有用:编写
obj#member#action
比编写
obj#member()#action()
更好。
# class example =
object
  method a =
    print_endline "This demonstrates a call to method a of class example"
end;;
        class example : object method a : unit end
# let x = new example;;
val x : example = <obj>
# x # a ;;
This demonstrates a call to method a of class example
- : unit = ()