换行符和格式化程序

时间:2011-02-23 04:32:47

标签: f# string-formatting

我最近有点自满地写了像

这样的东西
printf "\n%f\n" 3.2

而不是

printf "%s%f%s" Environment.NewLine 3.2 Environment.NewLine

我的问题是:有没有办法像第一个版本一样编写安全的第二个版本(即格式字符串中插入Environment.Newline的特殊字符,以便格式字符串中每个换行实例的参数不是必需的)?

2 个答案:

答案 0 :(得分:8)

如何使用kprintf进行双遍传递,将\ n替换为NewLine:

let nprintf fmt = Printf.kprintf (fun s -> s.Replace("\n", Environment.NewLine) |> printf "%s") fmt

然后在nprintf "\n%f\n" 3.2中,所有\ n都被NewLine取代。

答案 1 :(得分:5)

没有转义序列,但你可以缩短它:

[<AutoOpen>]
module StringFormatting =
    let nl = System.Environment.NewLine

//Usage
printfn "%s%f%s" nl 3.2 nl

Here是MSDN上的字符转义列表。

顺便说一句,我想知道这会做什么:

printfn @"
%f
" 3.2