换行符和格式化程序

Ste*_*sen 5 f# string-formatting

我最近变得有点自满地写了像

printf "\n%f\n" 3.2
Run Code Online (Sandbox Code Playgroud)

代替

printf "%s%f%s" Environment.NewLine 3.2 Environment.NewLine
Run Code Online (Sandbox Code Playgroud)

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

Mau*_*fer 8

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

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

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


Dan*_*iel 5

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

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

//Usage
printfn "%s%f%s" nl 3.2 nl
Run Code Online (Sandbox Code Playgroud)

是MSDN上的字符转义列表.

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

printfn @"
%f
" 3.2
Run Code Online (Sandbox Code Playgroud)