正如约翰已经说过的,你printHello
的不是一个函数——它是一个类型的值unit
。当您提供printfn
所有必需的参数时(就像您所做的那样),它会执行命令式操作并返回unit
(这是一种只有一个值写为 的类型()
)。您可以看到编写该声明会立即进行打印:
> let printHello = printfn "%A" "Hello";;
"Hello"
val printHello : unit = ()
以后使用时printHello
,它只是引用这个unit
值(不携带任何信息)。
如果您想让它成为一个函数(类型为unit -> unit
),每次执行时都会做一些事情,那么您可以使用 John 发布的示例。
该函数printfn
没有部分应用,因为您给了它所需的所有参数(因此它可以立即打印)。如果你想使用部分应用程序,你可以使用类似的东西:
> let printHello = printfn "%s %s" "Hello";; // Note - didn't give value for second %s
val printHello : string -> unit
现在printHello
是一个等待第二个参数然后运行的函数:
> printHello "World";;
Hello World
val it : unit = ()
> printHello "F#";;
Hello F#
val it : unit = ()