字符串 blit 失败并出现错误:此表达式的类型为字符串,但应为字节类型的表达式

问题描述

尝试编译以下表达式时:

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_string=0,_ 但没有结果

我在 Ubuntu 20.01.01 LTS 下使用 OCaml 4.11.1

解决方法

从 OCaml 4.10.0 开始,不可变 string 和可变 bytes 之间的区别是配置时默认值,不能逐个程序更改。

如果您正在尝试编译一些旧的遗留代码,使用没有这种区别配置的 OCaml 版本可能是有意义的。

否则,当需要就地更改字符串时(从您的代码片段中不清楚),调整您的代码以使用 bytes 会更具前瞻性。