W SML, mogę używać Printf.printf
do wyjściowego sformatowany ciąg, jakJak uzyskać sformatowany ciąg znaków w OCaml?
Printf.printf "Hello %s %d\n" world 123
Jednak printf
jest rodzajem wyjścia.
To, czego chcę, nie jest dla wyjścia, ale dla łańcucha znaków. Na przykład, chcę
let s = something "Hello %s %d\n" "world" 123
wtedy mogę dostać s = "Hello World 123"
W jaki sposób można to zrobić?
Czy mogę zdefiniować tak: 'let fmt =" Hello% s% d \ n ";; Printf.sprintf fmt "world" 123'? –
@JacksonTale, nie jestem pewien. Wygląda na to, że możesz zrobić 'let fmt = Printf.sprintf" Hello% s% d \ n ";; fmt "world" 123 ;; jednak. – zch
@JacksonTale: jeśli zrobisz to w ten sposób, wywnioskuje on niewłaściwy typ (ciąg zamiast formatu). W OCaml występuje "przeciążenie" literałów ciągów między ciągami i formatami. Aby wywnioskować, co trzeba, należy użyć 'format_of_string' (który jest funkcją identyfikującą, ale pomaga systemowi typu):' let fmt = format_of_string "Hello% s% d \ n" ;; Printf.sprintf fmt "world" 123'. A może możesz po prostu zrobić '(fun fmt -> Printf.sprintf fmt" world "123)" Hello% s% d \ n "' jeśli to wystarcza. – newacct