Reputation: 22297
I recently got bit by becoming complacent writing things like
printf "\n%f\n" 3.2
instead of
printf "%s%f%s" Environment.NewLine 3.2 Environment.NewLine
My question is: is there any way to write the safe second version as nicely as the first (i.e. a special character in the format string which inserts Environment.Newline
so that an argument for each newline instance in the format string isn't required)?
Upvotes: 8
Views: 6875
Reputation: 47904
There's not an escape sequence, but you could shorten it:
[<AutoOpen>]
module StringFormatting =
let nl = System.Environment.NewLine
//Usage
printfn "%s%f%s" nl 3.2 nl
Here is the list of character escapes on MSDN.
As an aside, I wonder what this would do:
printfn @"
%f
" 3.2
Upvotes: 8
Reputation: 99720
How about using kprintf for a double pass, replacing \n with NewLine:
let nprintf fmt = Printf.kprintf (fun s -> s.Replace("\n", Environment.NewLine) |> printf "%s") fmt
Then in nprintf "\n%f\n" 3.2
all \n get replaced by NewLine.
Upvotes: 10