F#:用字符串组合 sprintf ->允许格式化的单位函数
有关如何对格式及其格式进行自定义处理的信息,请参阅。我想做一些更简单的事情,具体来说,我想做一些达到以下效果的事情:
let writelog : string -> unit = ... // write the string to the log
let writelogf = sprintf >> writelog // write a formatted string to the log
编译器对此感到困惑我并不感到太惊讶,但是有什么办法让它工作吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
定义采用
printf
等格式字符串的函数的最简单方法是使用Printf.kprintf
函数。kprintf
的第一个参数是一个函数,用于显示格式化后的结果字符串(因此您可以将其传递给您的writelog
函数):fmt 参数是特殊格式字符串。这比jpalmer的解决方案效果更好,因为如果您指定一些附加参数,它们将直接传递给
kprintf
(因此参数的数量可以取决于格式化字符串)。你可以写:
The simplest way to define your own function that takes a formatting string like
printf
is to usePrintf.kprintf
function. The first argument ofkprintf
is a function that is used to display the resulting string after formatting (so you can pass it yourwritelog
function):The
fmt
parameter that is passed as a second argument is the special format string. This works better than jpalmer's solution, because if you specify some additional arguments, they will be directly passed tokprintf
(so the number of arguments can depend on the formatting string).You can write:
这有效
(会话来自 FSI)
关键是 writelogf 的额外参数
This works
(session is from FSI)
key is in the extra argument to writelogf