所有这些都从一个简单的想法开始:如何在ocaml中编写python样式的格式化字符串.
pythoners可以初始化一个字符串:
str = "this var: %s" % this_var
str2 = "this: %s; that: %s" % (this_var, that_var)
Run Code Online (Sandbox Code Playgroud)
但ocaml的格式化字符串代码为:
let str = Printf.sprintf "this var: %s" this_var
let str2 = Printf.sprintf "this: %s; that: %s" this_var that_var
Run Code Online (Sandbox Code Playgroud)
我相信我可以做ochl字符串格式化代码python-like首先,我定义了一个函数如下:
let (%) s x = Printf.sprintf s x
Run Code Online (Sandbox Code Playgroud)
那么,我可以直接写作:
let str = "this: %s" % "sth"
Run Code Online (Sandbox Code Playgroud)
但是简单的函数不能处理两个或多个变量的更复杂的情况.所以我想编写一个复杂的函数来使它完美地模拟python方式.我写的如下:
let (%) s li =
let split_list = Str.full_split (regexp "%[a-z]") s in
let rec fmt result_str s_list x_list = match s_list with
| [] …Run Code Online (Sandbox Code Playgroud)