【问题标题】:Defining F# function but not calling it, function still seems to get called [duplicate]定义 F# 函数但不调用它,函数似乎仍然被调用 [重复]
【发布时间】:2016-02-28 15:22:15
【问题描述】:

在下面的代码中,为什么会调用函数printStatement

module Tests

let printStatement =
    printfn "%s" "statement"

let functionCallingPrintStatement =
    printStatement

let functionNotCallingPrintStatement =
    printfn "%s" "This is a test"

如果我在主程序中调用functionNotCallingPrintStatement

open Tests

[<EntryPoint>]
let main argv =
    functionNotCallingPrintStatement     
    0 

这是输出:

声明

这是一个测试

如果我将函数 functionNotCallingPrintStatement 更改为:

let functionNotCallingPrintStatement =
    ()

第一个语句被禁止。

【问题讨论】:

标签: f#


【解决方案1】:

它们不是函数,它们是unit类型的值

val functionNotCallingPrintStatement : unit = ()

要使它们成为unit -&gt; unit 函数,请添加括号

let functionNotCallingPrintStatement () =
    printfn "%s" "This is a test"

val functionNotCallingPrintStatement : unit -> unit

【讨论】:

  • 好的,如果我不使用括号 (),我不会将函数绑定到我的值中。但是为什么从 main 调用这个值也会打印“语句”?
  • @Lastwall 您将一个值(不是函数)绑定到functionNotCallingPrintStatement 标识符。该值是调用printfn 的结果,这意味着在评估let 时将调用printfn
  • @Lastwall why is then calling this value from main also printing "statement" 的起始源代码可在F# spec 12.5 节中找到,但它不会立即为您提供帮助,因为它非常技术性。但是,您应该阅读它并花时间(数周到数月)来理解它。它会让你成为一个更好的程序员。
猜你喜欢
  • 1970-01-01
  • 2018-05-28
  • 2019-12-01
  • 2019-04-16
  • 2021-07-13
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
相关资源
最近更新 更多