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
関数は (名前が示すように) 文字列リテラルを形式に変換します。コンパイラの魔法が関係しているため、フォーマットは最終的に文字列リテラルから構築する必要があることに注意してください。たとえば、文字列を読み取ってフォーマットとして使用することはできません。(タイプセーフではありません。)