OCaml:将字符串转换为('a,unit,string)格式?
OCaml: Converting strings to ('a, unit, string) format?
我需要将字符串转换为格式。我得到了一组格式,我想访问每种格式并对它们使用 sprintf。
例如
let errors = [| "format 1"; "format 2"; ... ; "format 512" |]
let code_to_string (error_code : int) :(string) = sprintf errors.(error_code)
我看到了this question。根据最佳答案,不同的字符串产生不同类型的格式,这就是为什么:
let errors = [| format_of_string "format 1";
format_of_string "format 2";
...
format_of_string "format 512" |]
无效。
有没有办法把所有的格式都存储成字符串,需要的时候再转换?还是我必须为每个字符串编写一个函数?例如
let error1 = sprintf "format 1" args
let error2 = sprintf "format 1" args
...
let error512 = sprintf "format 512" args
您可以使用 Scanf.format_from_string
将 string
类型的任意静态未知值转换为 format6
类型的值。但是,当然,你需要知道格式的类型(而且它们都应该统一)。
这是激励人心的例子:
# let fmt = Scanf.format_from_string "Hello: %d" "%d";;
val fmt : (int -> '_a, '_b, '_c, '_d, '_d, '_a) format6 = <abstr>
# Printf.printf fmt 12;;
Hello: 12- : unit = ()
P.S。而是对这个特性的更极端的使用。
我需要将字符串转换为格式。我得到了一组格式,我想访问每种格式并对它们使用 sprintf。
例如
let errors = [| "format 1"; "format 2"; ... ; "format 512" |]
let code_to_string (error_code : int) :(string) = sprintf errors.(error_code)
我看到了this question。根据最佳答案,不同的字符串产生不同类型的格式,这就是为什么:
let errors = [| format_of_string "format 1";
format_of_string "format 2";
...
format_of_string "format 512" |]
无效。
有没有办法把所有的格式都存储成字符串,需要的时候再转换?还是我必须为每个字符串编写一个函数?例如
let error1 = sprintf "format 1" args
let error2 = sprintf "format 1" args
...
let error512 = sprintf "format 512" args
您可以使用 Scanf.format_from_string
将 string
类型的任意静态未知值转换为 format6
类型的值。但是,当然,你需要知道格式的类型(而且它们都应该统一)。
这是激励人心的例子:
# let fmt = Scanf.format_from_string "Hello: %d" "%d";;
val fmt : (int -> '_a, '_b, '_c, '_d, '_d, '_a) format6 = <abstr>
# Printf.printf fmt 12;;
Hello: 12- : unit = ()
P.S。而