据我所知,OCaml不需要显式return
语句来从函数中生成值。函数的最后一行是返回的内容。
在这种情况下,有人能告诉我以下函数foo
返回了什么吗?它似乎正在返回一个数据流。它是否返回lexer
?
and foo ?(input = false) =
lexer
| 'x' _
-> let y = get_func lexbuf
get_text y
| ',' -> get_func lexbuf
| _ -> get_text lexbuf
我正在尝试编辑下面的函数bar
,以返回数据流,这样我就可以在另一个函数中用bar
替换foo
。然而,bar
似乎有多个lexer,这阻止了这种返回。如何以类似于foo
的方式重写bar
以返回数据流?
let bar cmd lexbuf =
let buff = Buffer.create 0 in
let quot plus =
lexer
| "<" -> if plus then Buffer.add_string b "<" quot plus lexbuf
and unquot plus =
lexer
| ">" -> if plus then Buffer.add_string b ">" unquot plus lexbuf
in
match unquot true lexbuf with
| e -> force_text cmd e
首先,您的代码可能使用了一个旧的camlp4语法扩展,您应该精确地指出这一点。
其次,foo
返回与get_text
或get_funct
相同类型的值。如果没有这些函数的代码,就不可能说得更多。
第三,
Buffer.add_string b ">" unquot plus lexbuf
打字不正确。你是不是少了括号:
Buffer.add_string b ">" (unquot plus lexbuf)