如何在OCaml中获取格式化字符串?

Jac*_*ale 11 ocaml

在OCaml中,我可以Printf.printf用来输出格式化的字符串,比如

Printf.printf "Hello %s %d\n" world 123
Run Code Online (Sandbox Code Playgroud)

但是,printf是一种输出.


我希望的不是输出,而是字符串.例如,我想要

let s = something "Hello %s %d\n" "world" 123
Run Code Online (Sandbox Code Playgroud)

然后我可以得到 s = "Hello World 123"


我怎样才能做到这一点?

zch*_*zch 17

您可以使用Printf.sprintf:

# Printf.sprintf "Hello %s %d\n" "world" 123;;
- : string = "Hello world 123\n"
Run Code Online (Sandbox Code Playgroud)

  • @JacksonTale,我不太确定.看来你可以做`let fmt = Printf.sprintf"Hello%s%d \n";;; fmt"world"123 ;;`然而. (3认同)

Jef*_*eld 5

你可以这样做:

$ 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"
Run Code Online (Sandbox Code Playgroud)

format_of_string函数(顾名思义)将字符串文字转换为格式.请注意,格式最终必须从字符串文字构建,因为涉及编译器魔法.例如,您无法读取字符串并将其用作格式.(它不是类型安全的.)