我需要将字符串转换为格式。我有一个格式数组,我想访问每个格式并在其中使用sprintf。
例如:
let errors = [| "format 1"; "format 2"; ... ; "format 512" |]
let code_to_string (error_code : int) :(string) = sprintf errors.(error_code)
我看到了这个问题。根据最佳答案,不同的字符串会产生不同类型的格式,这就是为什么这样做:
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
[| "format 1"; "format 2"; ... ; "format 512" |]
当通过format_from_string
转换时,“format 1” 到 “format 512” 必须产生相同的类型。 - laifslet s = "string";format_of_string s;
不起作用。但是,可以将它们存储到数组中作为format6
元素。这意味着我必须通过添加缺失的参数来统一它们的类型。问题是,如果你有一个带有5个输入的格式,你必须知道哪些输入是要使用的,所以这是一个丑陋的解决方案。 - laifsScanf.format_from_string
,它可以与任何字符串一起使用。如果格式不匹配,它将在运行时失败。但实际上,您需要知道格式的类型,不同格式之间唯一可能变化的是实际文本。 - ivglet s = "hello %s";;Printf.sprintf (Scanf.format_from_string s) "world";;
给了我一个类型错误。现在我为每个字符串格式使用独立的函数,因为存储的字符串和类型化字符串(即“像这样的字符串”)似乎被 printf 以不同的方式处理。 - laifsPrintf.sprintf (Scanf.format_from_string s "%s") "world";;
现在这个问题容易理解多了。虽然,在调用时仍需要知道格式的类型,但这使事情变得更加清晰。谢谢。 - laifs