Ocaml 字符串blit失败,错误为:此表达式的类型为String,但表达式的类型应为bytes

Ocaml 字符串blit失败,错误为:此表达式的类型为String,但表达式的类型应为bytes,ocaml,Ocaml,尝试编译以下表达式时: String.blit (String.make tfs.len ' ') 0 tfs.txt 0 tfs.len; 编译器出现以下错误: Error: This expression has type string but an expression was expected of type bytes and the variable 'tfs.txt' (of type string) is pointed at. 正如在某个论坛中建议的那样,我尝试将变量OCA

尝试编译以下表达式时:

String.blit (String.make tfs.len ' ') 0 tfs.txt 0 tfs.len;
编译器出现以下错误:

Error: This expression has type string but an expression was expected of type bytes
and the variable 'tfs.txt' (of type string) is pointed at.
正如在某个论坛中建议的那样,我尝试将变量
OCAMLPARAM
设置为值:
safe\u string=0,\uu
但是没有结果


我在Ubuntu20.01.01 LTS下使用OCAML4.11.1,自从OCAML4.10.0以来,不可变
字符串和可变
字节之间的区别是一个配置时间默认值,不能逐个程序更改

如果您正试图编译一些旧的遗留代码,那么使用未经此区分配置的OCaml版本可能是有意义的


否则,当需要对字符串进行就地变异时(这在代码片段中不清楚),调整代码以使用
字节将更能证明未来的可行性。

因为OCaml 4.10.0,不可变
字符串
和可变
字节
之间的区别是配置时间默认值,不能逐个程序更改

如果您正试图编译一些旧的遗留代码,那么使用未经此区分配置的OCaml版本可能是有意义的


否则,当需要对字符串进行就地变异时(这在代码片段中不清楚),调整代码以使用
字节将更能证明未来的可行性。

来自:注意:OCaml字符串过去是可就地修改的,例如通过下面描述的String.set和String.blit函数。只有当编译器通过提供-unsafe-string命令行选项而处于“unsafe-string”模式时,才可能使用此用法。这种兼容模式使字符串类型和字节类型(请参见模块字节)可互换,以便期望字节序列的函数也可以接受字符串作为参数并修改它们。“由于这是一个故意破坏的更改,并且打算在将来删除使用
不安全字符串的功能,我强烈建议不要使用它。从:注意:OCaml字符串过去是可就地修改的,例如通过下面描述的String.set和String.blit函数。只有当编译器通过提供-unsafe-string命令行选项而处于“unsafe-string”模式时,才可能使用此用法。这种兼容模式使字符串类型和字节类型(请参见模块字节)可互换,以便期望字节序列的函数也可以接受字符串作为参数并修改它们。“由于这是一次故意破坏性更改,并且打算在将来删除使用
不安全字符串的功能,我强烈建议不要使用它。谢谢,我修改了程序以避免“就地”编辑字符串谢谢,我修改了程序以避免“就地”编辑字符串”