代码之家  ›  专栏  ›  技术社区  ›  TurtleMan

如何摆脱OCaml中的特殊字符?

  •  0
  • TurtleMan  · 技术社区  · 7 年前

    我在中使用模式匹配 OCaml 检查字符串中的有效字符,以及 \0 传递给模式匹配函数,它将向屏幕打印一条消息,表明找到了字符串的结尾。

    let my_fun char = 
        match char with
          'a' .. 'z' -> Printf.printf ("Valid ALPHA found: %c\n") char;
        | 'A' .. 'Z' -> Printf.printf ("Valid ALPHA found: %c\n") char;
        | ' ' -> Printf.printf ("WHITE_SPACE found\n");
        | '\0' -> Printf.printf("End of string reached\n"); (* The backslash isn't escaped *)
        | _ -> Printf.printf ("Invalid Token found\n"); 
     ;;
    

    编译器给出错误:

     Error: Illegal backslash escape in string or character (\0)
    

    你如何逃离 \ 或检查空终止符/换行符是否传入到 my_fun 在里面 OCaml ?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Pierre G.    7 年前

    您可以使用 Char.chr(0) 相反,或者只是 '\000'

    --修复-- 烧焦chr(0)确实不起作用-我想这是因为它不被视为常数。

    “\000”可以工作。

    let my_fun char = 
        match char with
          'a' .. 'z' -> Printf.printf ("Valid ALPHA found: %c\n") char;
        | 'A' .. 'Z' -> Printf.printf ("Valid ALPHA found: %c\n") char;
        | ' ' -> Printf.printf ("WHITE_SPACE found\n");
        | '\000' -> Printf.printf("End of string reached\n"); (* The backslash isn't escaped *)
        | _ -> Printf.printf ("Invalid Token found\n"); 
     ;;
    let a = Char.chr(0);;
    my_fun a;;
    

    将提供:

    utop # my_fun a;;
    End of string reached
    - : unit = ()