OCaml实现字符串转整数转字符时String.get重定义语法错误问询
OCaml字符串转字符功能实现问题解答
语法错误产生原因
你遇到的语法错误有两个核心原因:
- OCaml语法不支持直接通过
let 模块名.绑定名 = ...的写法为已有模块的顶层绑定赋值,模块下的函数只能在模块定义内部声明,或者通过模块扩展的方式新增/重写,直接把带点号的模块成员写法放在let左侧会直接触发语法错误。 - 你实现的函数类型也和标准库
String.get不匹配:标准库String.get的签名是string -> int -> char,作用是取出输入字符串指定下标位置的字符;而你写的函数是string -> char,功能是把字符串格式的数字转成对应ASCII字符,二者功能、签名完全不同,就算语法没问题也不应该覆盖标准库的String.get方法,会导致后续依赖标准库方法的代码全部出错。
正确实现方案
你要实现的「字符串转整数再转字符」功能,可以直接定义独立函数即可,不需要修改标准库的String模块:
let str_to_char s = char_of_int (int_of_string s) ;;
调用示例:
str_to_char "65";; (* 返回值:- : char = 'A' *)
如果确实需要把这个函数放到String模块下使用,可以通过扩展String模块的方式实现,不会影响原有String模块的方法:
module String = struct include String (* 保留原有String模块的所有方法 *) let str_to_char s = char_of_int (int_of_string s) end ;;
之后即可通过String.str_to_char "97"的方式调用,原有String.get方法也可以正常使用。
内容的提问来源于stack exchange,提问作者Besart Nuha
相关产品推荐
相关产品推荐

