f# - 在 F# 中,如何柯里化(Currying) ParamArray 函数(如 sprintf)?

标签 f# printf currying paramarray

在 F# 中,如何柯里化(Currying)一个接受可变数量参数的函数?

我有这样的代码...(日志函数只是一个示例,具体实现并不重要)

let log (msg : string) =
    printfn "%s" msg

log "Sample"

它在整个代码中使用 sprintf 格式的字符串进行调用,例如。

log (sprintf "Test %s took %d seconds" "foo" 2.345)

我想在日志函数中柯里化(Currying) sprintf 功能,所以它看起来像......

logger "Test %s took %d seconds" "foo" 2.345

我尝试过类似的方法

let logger fmt ([<ParamArray>] args) =
    log (sprintf fmt args)

但我不知道如何将 ParamArray 参数传递给 sprintf 调用。

这在 F# 中是如何完成的?

最佳答案

let log (s : string) = ()
let logger fmt = Printf.kprintf log fmt

logger "%d %s" 10 "123"
logger "%d %s %b" 10 "123" true

关于f# - 在 F# 中,如何柯里化(Currying) ParamArray 函数(如 sprintf)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145680/

相关文章:

inheritance - 继承类型时获取 "value is not defined"

C printf有点奇怪,打印完全是废话

c - 打印程序,请解释输出

javascript - 将部分应用的函数暴露给应用程序

python - 如何在给定参数位置柯里化(Currying)函数

F# - 展平列表/范围

f# - 如何使用 F# 创建多级 TreeView?

javascript - 将动态参数添加到函数,该函数的参数作为参数传递给当前函数

f# - 有没有办法在 F# 中通过字符串获取记录字段?

java - Java 中的 Printf 问题