【发布时间】:2021-05-17 09:21:37
【问题描述】:
我正在阅读这个answer,我想知道ignore 函数是如何内联的:它的参数应该被丢弃,但副作用仍然会发生:
// See https://github.com/dotnet/fsharp/blob/main/src/fsharp/FSharp.Core/prim-types.fs
let inline (|>) x f = f x
let inline ignore _ = ()
// Side effect function returning a value to ignore
let ok () =
printfn "ok"
true
// Usage
let t1 = ok () |> ignore
// = ignore (ok ()) // `|>` inlined
// = () // `ignore` inlined
// what happened for `printfn "ok"` inside the `ok` function?
控制台输出:
ok
val ok : unit -> bool
val t1 : unit = ()
在 FSI 中执行代码时,编译时会打印“ok”(因为它出现在 val ok : unit -> bool 之前)。
→ 执行.fs 文件中的代码会发生什么?
【问题讨论】:
标签: f#