0

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

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

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

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

有人熟悉这个问题吗?

4

3 回答 3

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)
于 2013-07-09T09:46:44.717 回答
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)
于 2013-07-09T07:03:36.743 回答
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
于 2013-07-09T06:39:02.317 回答