我想取一个字符串,并根据某些类型的字符串调用不同的函数来获取结果。我的代码如下:
let convert_string lval value =
if (String.index value '{' > 0) then
Pretty_utils.sfprintf "%s" convert_1 lval value
else
Pretty_utils.sfprintf "%s" convert_2 lval value
但是,此代码会引发编译器错误:
“此表达式具有类型字符串,但表达式需要类型单位”。
有谁熟悉这个问题?
答案 0 :(得分:3)
“%s”格式只接受一个参数,你给它3,你可能想要使用“%a%s”: 如果convert_1和convert_2是用于打印lval的函数。
let convert_string lval value =
if (String.index value '{' > 0) then
Pretty_utils.sfprintf "%a %s" convert_1 lval value
else
Pretty_utils.sfprintf "%a %s" convert_2 lval value
答案 1 :(得分:3)
你必须隔离函数(convert_x)及其参数或ocaml将sprintf之后的所有值解释为sprintf的参数。
let convert_string lval value =
if (String.index value '{' > 0) then
Pretty_utils.sfprintf "%s" (convert_1 lval value)
else
Pretty_utils.sfprintf "%s" (convert_2 lval value)
答案 2 :(得分:3)
()
convert_1 lval value
let convert_string lval value =
if (String.index value '{' > 0) then
Pretty_utils.sfprintf "%s" (convert_1 lval value)
else
Pretty_utils.sfprintf "%s" (convert_2 lval value)