这是我的代码的一部分:
(* Read the input file *)
let a = input_char inc in
(* Check if a is a number *)
if char_is_number a then
(* Read the second letter *)
let b = input_char inc in
(* Discard the space *)
input_char inc;
其中inc是input_channel
。它是从.map文件中读取的(顺便说一句,如果您有不错的库,而我不知道该库可以处理.map文件,我会很乐意使用它)input_char
将读取下一个字符。
基本上,我正在读取1个数字和一个字符。第三个应该是空格(我将在以后进行验证)并将被丢弃。
我当前的代码发出警告,说最后一行应该是unit
是否有一种安全/优雅/正确的方法来丢弃下一个读取的字符?
答案 0 :(得分:0)
要忽略表达式的返回值,只需使用ignore
函数即可。
let b = input_char inc in
ignore(input_char inc);
要解析足够复杂的文件,您可能应该考虑使用OCamllex + Menhir,尤其是如果您曾经使用lex / flex和yacc / bison。
答案 1 :(得分:0)
尽管ignore
可以满足您的要求,但在这种情况下,使用通配符模式_
似乎更适合您,因为您要另外分配“变量”。
考虑
let b = input_char inc in
let _ = input_char inc in
let c = input_char inc in
...
vs
let b = input_char inc in
ignore (input_char inc);
let c = input_char inc in
...
使用match
时可能遇到的通配符模式会匹配任何内容,然后直接丢弃该值而不将其绑定到名称。您可以在let <pattern> in <expression>
构造中使用任何模式。