假设我们有以下函数(函数体并不重要):
这个函数的类型是
现在我定义一个部分应用的函数:
但如果我试图简化声明并重复调用:
let writelogf greeting x =
Printf.printf "%A" greeting
Printf.printf "%A" x
这个函数的类型是
'a -> 'b -> unit
,这正是我想要的。现在我定义一个部分应用的函数:
let logf x = writelogf "Hello!" x
这个函数的类型是'a -> unit
,这正是我所期望的。我可以使用任何类型的参数来调用它:
logf "Test"
logf 1
但如果我试图简化声明并重复调用:
let logf2 = writelogf "Hello!"
logf2 "Test"
logf2 1
由于logf2
不再是泛型,而是具有类型string -> unit
(从第一次使用推断出来),所以它将不再编译。
为什么会这样呢?如果我有一个具有5个参数的函数并且我需要部分应用其中一个参数,我是否必须重复另外4个参数呢?
let inline …
也可能是一种解决方案。 - Be Brave Be Like Ukraine