在 OCaml 中,我可以Printf.printf
用来输出格式化的字符串,比如
Printf.printf "Hello %s %d\n" world 123
但是,printf
是一种输出。
我想要的不是输出,而是字符串。例如,我想要
let s = something "Hello %s %d\n" "world" 123
然后我可以得到s = "Hello World 123"
我怎样才能做到这一点?
在 OCaml 中,我可以Printf.printf
用来输出格式化的字符串,比如
Printf.printf "Hello %s %d\n" world 123
但是,printf
是一种输出。
我想要的不是输出,而是字符串。例如,我想要
let s = something "Hello %s %d\n" "world" 123
然后我可以得到s = "Hello World 123"
我怎样才能做到这一点?
您可以使用 Printf.sprintf:
# Printf.sprintf "Hello %s %d\n" "world" 123;;
- : string = "Hello world 123\n"
你可以这样做:
$ ocaml
OCaml version 4.00.1
# let fmt = format_of_string "Hello %s %d";;
val fmt : (string -> int -> '_a, '_b, '_c, '_d, '_d, '_a) format6 = <abstr>
# Printf.sprintf fmt "world" 123;;
- : string = "Hello world 123"
该format_of_string
函数(顾名思义)将字符串文字转换为格式。请注意,格式最终必须从字符串文字构建,因为涉及到编译器魔法。例如,您无法读取字符串并将其用作格式。(它不是类型安全的。)