我有一个副作用函数,f : int -> string -> unit
,我使用 f 1 "hi"
调用它。
如果函数更改为需要更多参数,为确保在调用站点中出现错误,我使用 () = f 1 "hi"|> ignore
调用该函数。如果函数被部分应用并且不会执行任何副作用,这将确保类型错误。
是否有更优雅的方法来避免意外的部分应用?
最佳答案
在最后添加一个“guard”参数:
let f a b c () = ...
并在调用点传递它:
f 42 "foo" 3.14 ()
如果你添加另一个参数,它的类型将不匹配 unit
(除非你添加一个 unit
参数,但你为什么要这样做?),和编译器会在调用点提示。
额外的 unit
参数是表示仅具有副作用的函数的常用方法。
另一方面,对于纯函数,不需要这个技巧,因为您会对它们的返回值感兴趣,而意外的部分应用会改变它的类型,导致编译器报错。
关于f# - 如何以紧凑的方式避免意外的部分应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59958523/