OCaml:在IF语句中返回字符串

时间:2013-07-09 05:58:33

标签: string ocaml

我想取一个字符串,并根据某些类型的字符串调用不同的函数来获取结果。我的代码如下:

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

但是,此代码会引发编译器错误:

“此表达式具有类型字符串,但表达式需要类型单位”。

有谁熟悉这个问题?

3 个答案:

答案 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)