f# - Printfn 值不是函数,不能在 F# 的交互窗口中应用

标签 f# fsi unit-type

这可能很简单,但我有一个包含简单示例函数的 .fs 文件。

let printHello = printfn "%A" "Hello"

我已经使用

将搜索路径设置为 .fs 文件
>#I "PathToMyFSFile"

我已经使用

加载了我的文件
>#load "Test.fs"

效果很好。现在我想调用将 hello 实际打印到屏幕的函数,但事实证明那太难了

> Test.printHello;;
val it : unit = ()

尝试过 Test.printHello();;同样,但不起作用。我实际上如何让它在屏幕上打印“Hello”?

最佳答案

您当前的 printHello 实际上不是一个函数。要使其成为您需要做的功能

let printHello() = printfn "%A" "Hello"

注意 ()。然后一切都应该工作。

编辑:

当编译器看到你的定义时

let printHello = printfn "%A" "Hello"

它将它作为一个简单的数据项传递。例如,考虑这个程序:

let printHello = printfn "%A" "Hello"
printfn "World"
printHello

这将打印 "Hello" 然后是 "World"printHello 只有单位类型,所以什么都不做。对比一下

let printHello() = printfn "%A" "Hello"
printfn "World"
printHello()

这里 printHello 是一个函数。在这种情况下,函数仅在显式调用时执行,因此打印 "World" 然后是 "Hello"

关于f# - Printfn 值不是函数,不能在 F# 的交互窗口中应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8091681/

相关文章:

interface - 如何在 F# 中实现返回 void 的接口(interface)成员

f# - 记住类型()->'a的函数

c# - XamlObjectWriterException : Cannot create unknown type '{http://schemas.microsoft.com/winfx/2006/xaml/presentation}Ribbon'

collections - 从 String[] 到 F# List 的高效转换

.net - 为什么这个函数不是尾递归?

f# - 如何让 Canopy 的 Live HtmlReporter 工作?

winforms - 使用反射来确定对象是否需要在 GUI 线程上调用其成员

F# - 创建委托(delegate)